gpt4 book ai didi

java - InputStream 中的可用方法是迭代文件的好方法吗?

转载 作者:行者123 更新时间:2023-12-02 04:16:21 26 4
gpt4 key购买 nike

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

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.

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

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

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

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

最佳答案

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

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

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

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

关于java - InputStream 中的可用方法是迭代文件的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33272431/

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