InputStream 中的可用方法是遍历文件的好方法吗?
Is available method in InputStream a good way to iterate through a file?
根据文档,"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.
那么,这个方法需要多长时间才能return一个结果。如果我有一个包含 10000 个单词的文件,我想通过这样检查来检查每个单词:
while (steam.available() > 0) {
steam.read(); // suppose that this read a word
}
所以每次读完第一个单词后,该方法是否要遍历接下来的 9999 个单词?并且,在第二个单词之后,它是否检查接下来的 9998 个单词?
从文档上说是方法"estimate the number of bytes",那它是怎么做到的呢?
如其所述,目的是告诉您在不阻塞读取调用的情况下可以读取多少字节。这对于网络连接非常有用,其中数据正在填充缓冲区,您可能希望在不阻塞读取调用的情况下处理尽可能多的数据,等待更多数据。
它不常用,也不会告诉您总体上有多少可用。比如iv看到它用来测试消息的长度,这当然是错误的,因为此时可能只收到了消息的一部分。
您最好只读取整个流,直到到达 EOF。 available() 只有在你想在不阻塞的情况下处理尽可能多的数据时才有用。它说 "estimate" 因为可能会一直有更多的数据传入,并且您可能已经能够读取比调用它时返回的 available() 更多的字节。
在实践中,您需要流中的所有数据,或者在达到某个值时停止。但这是一个独立的问题,它与它从哪里来的速度有多快有关。无论它是否阻塞——你既不会知道也不在乎。 :)
根据文档,"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.
那么,这个方法需要多长时间才能return一个结果。如果我有一个包含 10000 个单词的文件,我想通过这样检查来检查每个单词:
while (steam.available() > 0) {
steam.read(); // suppose that this read a word
}
所以每次读完第一个单词后,该方法是否要遍历接下来的 9999 个单词?并且,在第二个单词之后,它是否检查接下来的 9998 个单词?
从文档上说是方法"estimate the number of bytes",那它是怎么做到的呢?
如其所述,目的是告诉您在不阻塞读取调用的情况下可以读取多少字节。这对于网络连接非常有用,其中数据正在填充缓冲区,您可能希望在不阻塞读取调用的情况下处理尽可能多的数据,等待更多数据。
它不常用,也不会告诉您总体上有多少可用。比如iv看到它用来测试消息的长度,这当然是错误的,因为此时可能只收到了消息的一部分。
您最好只读取整个流,直到到达 EOF。 available() 只有在你想在不阻塞的情况下处理尽可能多的数据时才有用。它说 "estimate" 因为可能会一直有更多的数据传入,并且您可能已经能够读取比调用它时返回的 available() 更多的字节。
在实践中,您需要流中的所有数据,或者在达到某个值时停止。但这是一个独立的问题,它与它从哪里来的速度有多快有关。无论它是否阻塞——你既不会知道也不在乎。 :)