【发布时间】:2016-02-01 05:54:07
【问题描述】:
我正在使用 ProcessBuilder 通过 Java 输入和接收来自 C++ 程序的信息。启动该过程一次后,我希望能够输入新字符串并接收它们的输出,而无需重新启动整个过程。这是我迄今为止采取的方法:
public void getData(String sentence) throws InterruptedException, IOException{
InputStream stdout = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stdout);
OutputStream stdin = process.getOutputStream();
OutputStreamWriter osr = new OutputStreamWriter(stdin);
BufferedWriter writer = new BufferedWriter(osr);
BufferedReader reader = new BufferedReader(isr);
writer.write(sentence);
writer.close();
String ch = reader.readLine();
preprocessed="";
while (ch!=null){
preprocessed = preprocessed+"~"+ch;
ch = reader.readLine();
}
reader.close();
}
每次我想向正在运行的进程发送输入时,我都会调用此方法。但是,有一个问题:我第一次发送输入,很好,输出接收完美。但是,第二次调用它时,我收到错误
java.io.IOException: Stream closed
这是出乎意料的,因为当再次调用该方法时,理论上所有内容都会重新创建。此外,删除关闭 BufferedWriter 的行会导致代码在下一行停止,就好像 BufferedReader 正在等待 BufferedWriter 关闭一样。
最后一件事 - 即使我创建了一个 NEW BufferedWriter 并指示该方法在第二次调用时使用它,我也得到了同样的异常,我完全不明白。
有什么办法可以解决吗?
非常感谢!
【问题讨论】:
标签: java stream ioexception processbuilder bufferedwriter