我们知道,System.in
(标准输入)连接到控制台。所以,无论何时我们在控制台中写入,它都会流向这个流。但是有没有办法将值传递给这个标准输入而无需从控制台输入,即如System.in = "ABCD"
。我只是想模仿价值从控制台传递。
回答
是的,有。使用System.setIn(InputStream in)
。
您可以提供的InputStream
任何亚型为好,所以如果你要提供一个特定的值,可以使用StringBufferInputStream
,就像这样:
StringBufferInputStream s = new StringBufferInputStream("ABCD");
System.setIn(s);
虽然它被声明为'public final static InputStream' –
但它不适用于多线程。我在一个线程中使用System.setIn(s),并在另一个线程中使用Scanner.nextLine()。当我从一个线程将值传递给System.SetIn时,它对使用Scanner.nextLine()的另一个线程没有任何影响。有什么办法让它在多线程中工作吗? – Angom
当我读到它时,您已经在第二个线程中创建了一个'Scanner',*在第一个线程中更改'System.in'之前*。扫描器保存对创建期间提供给它的“InputStream”的引用。如果在第二个线程中创建'Scanner'之前从第一个线程调用'System.setIn(...)',它应该没有问题。 – mthmulders
我认为,而不是你的方法是直接访问System.in:
public void run() {
process(System.in);
}
public void process(InputStream is) {
byte b[] = new byte[4000];
int bytesRead = is.read(b);
...
}
:
public void process() {
byte b[] = new byte[4000];
int bytesRead = System.in.read(b);
...
}
你应该让输入流被传递到方法因素说出来
这给了你相同的行为,但可以让你用自己设计的输入流调用业务逻辑以用于测试目的。
- 1. java System.in如何使用System.in.read()
- 2. Java:在System.in中使用NIO
- 3. 如何在AngularJS中为ng-repeat赋值?
- 4. 如何在java不兼容类型中为此函数赋值
- 5. Java流和System.in
- 6. 从Java的System.in
- 7. Java为XML节点赋值
- 8. 如何为数组赋值?
- 9. 如何为参考赋值?
- 10. 从System.in读入 - Java
- 11. 如何为Java中的继承字段赋值?
- 12. 在java中读取System.in的权限
- 13. 如何为JQUERY中的变量赋值
- 14. 如何为选中的JChechbox赋值?
- 15. 如何为rails中的update_attributes赋值?
- 16. 如何为堆中的char []赋值?
- 17. 如何为CLPFD中的变量赋值?
- 18. 如何为MATLAB中的变量赋值?
- 19. 如何在Python中按值赋值
- 20. 如何在Netbeans中从System.in(Java)获得输入?
- 21. Java中的并行赋值?
- 22. 流中的赋值(java)
- 23. java中的布尔赋值
- 24. System.in()如何工作?
- 25. 如何为DB变量赋值DB值?
- 26. System.in如何在inputstream对象中?
- 27. 如何在PHP中将变量赋值为GET值
- 28. 如何在Z3py中为函数赋值(断言)值?
- 29. java并发赋值
- 30. 在Java中赋值期间投射
你到底想干什么?我听起来很奇怪。其实你读了System.in中有什么,而不是分配给它。 –