【问题标题】:Why does my program block while reading line from BufferedReader?为什么我的程序在从 BufferedReader 读取行时阻塞?
【发布时间】:2013-03-10 04:20:51
【问题描述】:

我正在使用 ProcessBuilder 执行一些命令,如下所示:

BufferedReader response = null;
process = processBuilder.start();           
response = new BufferedReader(new InputStreamReader(process.getInputStream()));

但代码块在下一行,而从响应中读取行。

while((line = response.readLine()) != null) {
  /* some code here */
}

我做了一些谷歌,我发现当 readLine() 没有得到 EOL 时,它会阻塞。

我怎样才能让它工作或解决这个问题。

【问题讨论】:

  • 其中一种方法是您可以读取字节,while((i=bufferreader.read(buffer,i,100))!= -1) { //do work }
  • 感谢您的帮助。我会试试这个。 :)
  • 请使用术语。这个词是“阻止”,而不是“闲逛”。

标签: java adb


【解决方案1】:

根据 API,这就是 readLine() 的指示

读取一行文本。行被视为由换行符 ('\n')、回车符 ('\r') 或回车符后紧跟换行符中的任何一种来终止。

所以我认为您必须确保提供行终止符以避免阻塞。

【讨论】:

  • 如何设置行终止符?响应由执行流程构建器返回。只要我能读懂。对吗?
  • line = response.readLine() 我在这一行没有收到任何响应或字符串。所以我无法在行尾附加 '\n'。
  • @Addict 评论应该解决这个问题,阅读 bytes 而不是 lines
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 2010-11-28
相关资源
最近更新 更多