如果 BufferedWriter 仍然打开,为什么 BufferedReader 会失败?

Why does BufferedReader fail if BufferedWriter is still open?

我正在尝试从 java 应用程序 运行 一个 .exe 文件,并希望能够(现在)像终端一样使用它,我可以在其中写入 .exe然后在再次写入之前从中读回。

我的问题是代码仅在 reader 尝试从输入流读取之前关闭编写器时才有效。

String line = "", prev = "";
    Scanner scan = new Scanner(System.in);

    ProcessBuilder b = new ProcessBuilder("myexe");
    b.redirectErrorStream(true);

    Process p = b.start();
    OutputStream stdin = p.getOutputStream();
    InputStream stdout = p.getInputStream();

    BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));


    System.out.println ("->");
    while (scan.hasNext()) {
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
        String input = scan.nextLine();
        if (input.trim().equals("exit")) {
            writer.write("C");
        } else {
            writer.write(input);
        }
        writer.flush();

        //writer.close();
        while ((line = reader.readLine ()) != null) {
            System.out.println ("[Stdout] " + line);

            if (line.equals(prev)){
                break;
            }
            prev = line;
          }
          reader.close();
        }

所以我的问题是,我是不是对 ProcessBuilder 做错了什么?我读过有关不正确读取输出会导致系统挂起的信息。但这并不能解释为什么当编写器仍然打开时它会挂起?

问题实际上出在我的 C 编译的 .exe 上。当它是 运行 时,应用程序正在打印输出,因此在 cmd 终端中工作,但是我没有在发送每个命令后刷新缓冲区。完成此操作后,java 应用程序将在发送时识别每个命令。