InputStream.available()什么时候有用?

问题描述 投票:0回答:2

InputStream.available()
BufferedInputStream.available()
在Java中的套接字编程中什么时候有用?

java sockets
2个回答
5
投票

我的看法是,除非您知道“估计”有多好,否则该方法没有用。 对于连接到套接字的流,估计不可能在所有情况下都是可靠的。

问题在于该方法的返回值不区分已到达套接字上的流末尾的情况以及套接字上当前没有可用字符但可能会传递更多字符的情况。 根据 javadoc,两者都可以返回零。

这种不确定性使得该方法几乎毫无用处。

在套接字情况(以及类似的情况)中,
    available()
  • 方法并没有真正告诉您如果结果为零则是否读取。 如果你做出了错误的选择,你要么会在无意中阻塞,要么永远不会发现套接字实际上已经关闭。 其中任何一个都可能很糟糕。

    在其他情况下(例如从本地文件读取),还有其他方法可以确定读取是否可能阻塞。 此外,无论如何,读取不太可能长时间阻塞,因此避免阻塞通常没有多大意义。
  • 最后,在某些情况下,我认为您可以获得非零响应并无论如何都有读取调用块。 (我正在考虑远程安装的文件系统上的文件......以及当您尝试读取时远程服务器冻结的可能性。)
  • 底线是
  • available()
被记录为返回

估计

。  javadoc 不保证该估计在所有可能的情况下有多可靠,并且实际上在某些情况下该估计不可能准确,因为这需要知道远程服务器将要做什么。

对于http请求,可以用它来确定输入流中存在非零字节数吗?

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.