【问题标题】:Java - Can't read from InputStream, until OutputStream is closedJava - 无法从 InputStream 读取,直到 OutputStream 关​​闭
【发布时间】:2018-01-13 13:16:43
【问题描述】:

我正在尝试读写 bash/cmd。我正在使用流程构建器开始流程。 第一次对命令行进行读写操作非常完美。但是当我在命令行中写了一些东西时,我无法从 InputStream 中读取,直到我关闭了我的缓冲写入器。当我关闭缓冲写入器时,我可以再次从命令行读取。 当我这样做时, outputStream 和 inputStream 之间是否存在冲突:

Thread thread = new Thread() {
        public void run()
        {
            try
            {
                ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "jdb" + path);
                processBuilder.redirectErrorStream(true);
                Process process = processBuilder.start();
                BufferedReader bufferedReaderInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
                BufferedReader bufferedReaderError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
                String currentLine = "";
                while ((currentLine = bufferedReaderInput.readLine()) != null)
                {
                    bufferedWriter.write("hello");
                    bufferedWriter.flush();
                    //If I close the bufferedWriter here, I can read again from the bufferedReader.
                }
                while ((currentLine = bufferedReaderError.readLine()) != null)
                {
                    consoleWindow.appendText(currentLine);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    };
    thread.start();

【问题讨论】:

  • 了解您在 bash 中运行的确切命令可能会有所帮助。
  • 这部分代码在您的程序中的预期目的是什么?是运行用户输入的命令吗?请解释一下。
  • 抱歉,我更新了我的问题。我正在尝试使用 jdb 和路径启动 java 控制台调试器。

标签: java bufferedreader bufferedwriter


【解决方案1】:

尝试改变:

bufferedWriter.write("hello");

到:

bufferedWriter.write("hello\n");

没有 '\n' 就像在 jdb 中输入“hello”但不按回车。

【讨论】:

  • 非常感谢,这解决了我的问题 :)
猜你喜欢
  • 2012-04-30
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2013-02-20
  • 1970-01-01
  • 2011-05-05
  • 2011-08-13
相关资源
最近更新 更多