gpt4 book ai didi

java - 使用 ObjectInputStream.available() 等同于 Scanner.hasNext()

转载 作者:行者123 更新时间:2023-12-01 14:21:07 25 4
gpt4 key购买 nike

正如ObjectInputStream.available() 的 javadoc 中所述:

Returns the number of bytes that can be read without blocking.

我们应该能够使用以下代码,就像Scanner.hasNext()

if (inputStream.available() > 0) {
Object input = inputStream.readObject();
}

但是当我使用它时,即使流中有一些未读的数据,这种情况也不会变为true

实际上,我在客户端-服务器应用程序中以这种方式使用它,但它卡在 if 处:

    while (continueListening) {
Object responseObj;
try {
if (inputStream.available() == 0) { // this condition is always met
continue;
}
responseObj = inputStream.readObject();
.
.
.

最佳答案

来自InputStream JavaDoc :

Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. [...]

The available method for class InputStream always returns 0.

因此,像您一样依赖 available() 的结果通常不是一个好主意。您正在循环 0 的情况,忙等待数据。相反,您应该使用专用线程并仅调用 readObject() ,该线程将阻塞,直到有足够的数据可用或引发异常,例如如果连接在读取时关闭。

Scanner.hasNext()如果下一个 token 尚未被(完全)读取,也可能会阻塞。

关于java - 使用 ObjectInputStream.available() 等同于 Scanner.hasNext(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com