如果对一个 InputStream 调用 read 方法,在没有数据可读取的时候,理论上会处于阻塞状态。
This method blocks until input data is available, end of file is detected, or an exception is thrown.
那么如果一个 IO 流,曾经有数据可读取但已经被读取完毕,但后续仍有可能增加可读取的数据,此时调用 read ,是不是仍然属于这里所说的“blocks until input data is available”,也就是,是否会发生阻塞?
我获取了 Process 的 InputStream ,里面的内容是这个进程的标准输出(以及错误输出)。
显然,进程的输出是间断性的,我想知道现有输出已经被读完的情况下,此时再调用 read ,是否还会处于阻塞状态?
private ProcessBuilder dumpProcessBuilder;
ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(1024);
...
dumpProcessBuilder.redirectErrorStream(true);
...
Process dumpProcess = dumpProcessBuilder.start();
try (InputStream in = procForReader.getInputStream()) {
byte[] buf = new byte[1024];
int bytesRead = 0;
while ((bytesRead = in.read(buf)) != -1) {
output.write(buf, 0, outputBuffer);
}
}
...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.