我想在Java中的两个不同的类中访问相同的输入流。因此,一个类期望来自System.in的输入,而另一个类则写入System.in。这可能吗?
所以,让我们说我的第一堂课Test.java期望来自System.in的输入:
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
PrintStream output = new PrintStream(System.out);
output.println("Enter your username: ");
String userName;
userName = input.readLine().trim();
output.println("Welcome " + userName + "!");
}
第二个类写入相同的输入:
public class Test2 {
public static void main(String[] args) throws UnsupportedEncodingException {
String data = "John";
InputStream testInput = new ByteArrayInputStream( data.getBytes("UTF-8") );
System.setIn(testInput);
}
}
上面的代码片段目前无法正常工作,因为我猜测每个类都有自己的输入流。我该如何处理?
答案 0 :(得分:0)
我建议重新设计。创建一个主类,它产生两个写入PipedInputStream http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html和PipedOutputStream http://docs.oracle.com/javase/7/docs/api/java/io/PipedOutputStream.html的其他线程。
以下是如何操作的教程,它清楚地解释了如何: io-pipestream-example
记住不应该写入System.in,这是主要的程序参数。