我想通过使用一些输入(例如“join 8”)对我的 P2P 系统进行一些测试。 8 是节点号。对于我的系统,命令“join 8”是从标准输入读取的,但我不想将其键入数百次以进行数百次测试,因此我编写了一个测试函数来随机生成节点号,然后通过以下方式调用“join”命令本身。所以我希望JAVA编写命令而不是我自己输入到stdin。我怎样才能做到这一点?
目标是:当我输入“test join 3”时,代码应该随机生成 1-255 之间的 3 个节点号,并为它们调用 join 命令。
我的代码现在不起作用:
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();
}
}
}
Java System
类为您提供了一种设置输入流的方法System.in
.
该方法称为setIn https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#setIn(java.io.InputStream)并允许您重新分配标准输入。
Edit
以下是如何执行此操作的示例:
InputStream fakeIn = new ByteArrayInputStream(dataYourWantToPassAsBytesArray);
System.setIn(fakeIn);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)