我正在尝试使用ProcessBuilder加载二进制文件,使其保持加载状态,然后偶尔将数据放入并解析输出。
我现在拥有的一个例外是说流已关闭。
我是否对Process
如何在Java中工作有误解?我尝试在这里运行的二进制文件接受来自stdin的输入并将结果打印到stdout。它应该工作。如果我通过输入手动输入二进制文件,并且输入行为是预期的,但我想知道为什么在Java中调用时这不起作用。
我的代码如下所示:
public class Run {
public static void main(String [] args) throws IOException, InterruptedException{
List<String> cmd = new ArrayList<String>();
cmd.add("/path/to/binary");
cmd.add("/path/to/param.par");
Process process=null;
try {
process = new ProcessBuilder().inheritIO().command(cmd).start();
} catch (IOException e) {
e.printStackTrace();
}
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
try {
writer.write("Hi\\nhow\\nare\\you\\n?\\n\\n");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
String l=null;
while((l=reader.readLine())!=null){
System.out.println(l);
}
}
}
我得到的例外是:读取参数 file ... java.io.IOException:Stream关闭了 java.lang.ProcessBuilder中的$ NullOutputStream.write(ProcessBuilder.java:433) 在java.io.OutputStream.write(OutputStream.java:116)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)at java.io.BufferedWriter.flush(BufferedWriter.java:254)at hack.Run.main(Run.java:28)完成0