【问题标题】:Is available method in InputStream a good way to iterate through a file?InputStream 中的可用方法是遍历文件的好方法吗?
【发布时间】:2016-01-21 05:23:26
【问题描述】:

从文档来看,“available”方法的作用是:

返回可读取的字节数的估计值(或 跳过)从此输入流中没有被下一个阻塞 为此输入流调用方法。

那么,这个方法需要多长时间才能返回结果。如果我有一个包含 10000 个单词的文件,并且我想通过这样的检查来遍历每个单词:

while (steam.available() > 0) {
    steam.read(); // suppose that this read a word
}

那么在每次阅读第一个单词之后,该方法是否会遍历接下来的 9999 个单词?并且,在第二个单词之后,它会检查接下来的 9998 个单词吗?

从文档中,它说方法“估计字节数”,那么它是如何做到的呢?

【问题讨论】:

    标签: java inputstream fileinputstream


    【解决方案1】:

    正如它所说,目的是告诉您在没有读取调用阻塞的情况下可以读取多少字节。这对于网络连接非常有用,其中数据正在填充缓冲区,您可能希望在没有读取调用阻塞的情况下处理尽可能多的数据,等待更多数据。

    它不常用,也不会告诉您总共有多少可用。例如,iv 看到它用于测试消息的长度,这当然是错误的,因为那时可能只收到了一部分消息。

    您最好只阅读整个流,直到达到 EOF。 available() 仅在您想在不阻塞的情况下处理尽可能多的数据时才有用。它说“估计”,因为可能会一直有更多的数据进入,并且您可能已经能够读取比在您调用它的确切时刻返回的可用()更多的字节。

    实际上,您需要流中的所有数据,或者在达到某个值时停止。但这是一个单独的问题,它从任何地方流入的速度有多快。不管它是否阻塞——你既不知道也不关心。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多