【发布时间】:2011-09-23 21:21:03
【问题描述】:
我正在尝试编写一段解锁代码来读取PipedInputStream。它基本上会在调用阻塞读取 API 之前检查是否有要读取的内容:
int n = 0;
if ((n = pipedInputStream_.available()) > 0) {
pipedInputStream_.read(...)
}
阅读java API doc 我无法确定该检查应该是什么,因为可能的值为零(意味着没有数据,或关闭/中断的流)或大于零。那么调用者如何知道是否有任何要读取的内容呢?
“返回可以从这个输入流中读取而不阻塞的字节数,如果这个输入流已经通过调用它的 close() 方法关闭,或者如果管道未连接,或损坏,则返回 0。”
查看源代码似乎唯一的值是零或大于零。
public synchronized int available() throws IOException {
if(in < 0)
return 0;
else if(in == out)
return buffer.length;
else if (in > out)
return in - out;
else
return in + buffer.length - out;
}
【问题讨论】:
-
零并不意味着关闭或中断流。零或大于零是每个规范唯一允许的结果。
-
你能解释一下为什么你说零并不意味着关闭或中断流吗?请看我同意的 seh 的解释。 Java 文档还说:“返回:可以从该输入流中读取而不会阻塞的字节数,或者如果该输入流已通过调用其 close() 方法关闭,或者如果管道未连接,则为 0,或者坏了。”
-
你误会了。零表示要么没有数据可以读取而不阻塞或流已关闭或管道未连接或 i> 管道坏了。这并不意味着这些条件中的一个。
-
当然。附录消除了您之前回复中第一个陈述引起的混乱。
-
这里的混淆包含在您的陈述中。我已经为你编辑了。
标签: java inputstream pipe