Java ProcessBuilder:流已关闭

too*_*bee 5 java processbuilder

我正在尝试使用 ProcessBuilder 加载二进制文件,将其保持在加载状态,然后偶尔放入数据并解析输出。

我现在所拥有的抛出一个异常,表示流已关闭。

Process我对 Java 的工作原理有误解吗?我尝试在此处运行的二进制文件接受来自标准输入的输入并将结果打印到标准输出。它应该有效。如果我通过 cmd 手动输入二进制文件,则该行为是预期的,但我想知道为什么在 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的例外是这样的:读取参数文件...java.io.IOException:流在 java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433) at java.io.OutputStream.write(OutputStream.java :116)在sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)在sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)在sun.nio.cs.StreamEncoder.implFlush(StreamEncoder。 java:295)在sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)在java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)在java.io.BufferedWriter.flush(BufferedWriter.java:254) )在 hack.Run.main(Run.java:28) 完成 0