5

可能重复:
将数据写入 System.in

我们知道System.in(标准输入)连接到控制台。因此,每当我们在控制台中写入时,它都会流向该流。但是有没有办法在不从控制台输入的情况下将值传递给这个标准输入,例如System.in = "ABCD". 我只想模仿,因为值是从控制台传递的。

4

2 回答 2

13

就在这里。使用System.setIn(InputStream in).

您也可以提供 的任何子类型InputStream,因此如果您想提供特定值,可以使用StringBufferInputStream,如下所示:

StringBufferInputStream s = new StringBufferInputStream("ABCD");
System.setIn(s);
于 2012-10-23T10:43:34.280 回答
0

我认为不是让您的方法直接访问 System.in:

public void process() {

    byte b[] = new byte[4000];
    int bytesRead = System.in.read(b);

    ...

}

您应该将其考虑在内,以便将输入流传递到方法中:

public void run() {

    process(System.in);

}

public void process(InputStream is) {

    byte b[] = new byte[4000];
    int bytesRead = is.read(b);

    ...

}

这为您提供了相同的行为,但也允许您使用自己为测试目的设计的输入流来调用业务逻辑。

于 2012-10-23T11:42:45.987 回答