如何写入stdIn(JAVA)

时间:2015-04-13 21:24:00

标签: java stdout stdin

我想通过使用以下输入对我的P2P系统进行一些测试:"加入8"。 8是节点号。对于我的系统,命令"加入8"从stdin中读取,但我不想为百次测试输入数百次,所以我编写了一个测试函数来随机生成节点编号,然后调用" join"命令本身。所以我希望JAVA编写命令而不是我自己的输入到stdin。我怎样才能做到这一点? 目标是:当我输入"测试连接3"时,代码应在1-255之间随机生成3个节点号,并为它们调用连接命令。 我的代码现在还没有真正起作用:

if (command[0].equals("test")) {
            //test join
            if (command[1].equals("join")) {
                int nodenum = Integer.parseInt(command[2]);
                Random rand = new Random();
                Set<Integer> generated = new LinkedHashSet<Integer>();
                while (generated.size() < nodenum) {
                    Integer next = rand.nextInt(255) + 1;
                    generated.add(next);
                    ProcessBuilder builder = new ProcessBuilder("java", "Test");
                    Process process = builder.start();
                    //stdIn=new BufferedReader(new InputStreamReader("join"));
                    OutputStream stdin = process.getOutputStream();
                    InputStream stdout = process.getInputStream();


                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
                    writer.write("join "+next);
                    writer.flush();
                    writer.close();

                }


            }

        }

2 个答案:

答案 0 :(得分:5)

Java System类为您提供了一种设置System.in输入流的方法。

该方法称为setIn,允许您重新分配标准输入。


修改

这是一个如何做到的例子:

InputStream fakeIn = new ByteArrayInputStream(dataYourWantToPassAsBytesArray);
System.setIn(fakeIn);

答案 1 :(得分:0)

看起来你想看https://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html

它允许您创建inputStream将生成的数据。

e.g。

public void doTestStreamStuff(){
    byte[] testData = ....
    InputStream is = new ByteArrayInputStream(testData);
    while(doStuff){
        int i = is.read();
        ...
    }
}