访问相同的系统输入流

时间:2014-04-07 20:07:12

标签: java console .net system.in

我想在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);

    }

}

上面的代码片段目前无法正常工作,因为我猜测每个类都有自己的输入流。我该如何处理?

1 个答案:

答案 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,这是主要的程序参数。