我正在尝试编写一段解除阻塞代码以从PipedInputStream
中读取。它主要检查是否有任何调用阻塞前阅读阅读API:Java PipedInputStream available()方法返回值
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;
}
零并不意味着封闭或断开的流。每个规格仅允许零或大于零。 – EJP
你能澄清为什么你说零不暗示关闭或破流?请看看我同意的那个解释。 Java文档还指出: “返回: 可以从此输入流读取的无阻塞字节数,如果此输入流已通过调用close()方法关闭,或者管道是未连接或断开。“ – USQ
你误会了。零意味着*要么*没有数据要被读取而没有阻塞*或*流被关闭*或*管道未连接*或*管道损坏。这并不意味着只有这些条件中的一个。 – EJP