我想通过使用以下输入对我的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();
}
}
}
答案 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();
...
}
}