我正在读取1021字节块的任意大小的文件,其中文件的最后一块的块大小BufferedInputStream进行此操作,该FileInputStream
包裹在reader
周围,代码看起来(大致)如下所示(其中BufferedInputStream
是available()
,并且在循环中运行):
int availableData = reader.available();
int datalen = (availableData >= 1021)
? 1021
: availableData;
reader.read(bufferArray, 0, datalen);
但是,通过阅读API文档,我注意到
availableData
仅在调用“阻塞”之前给出可用大小的“估计”。每次迭代打印出available()
的值似乎都可以得到预期的值-从文件大小开始,逐渐减小直到BufferedInputStream给出错误答案的情况?编辑:对不起,其他信息。
FileInputStream
包裹在周围。从FIS的源代码中,我认为可以安全地使用available()来衡量在本地文件情况下还剩下多少数据。我对吗? 最佳答案
这个问题毫无意义。这四行代码完全等效于此:
reader.read(buffer, 0, 1021);
不会在您在available()调用和read之间引入定时窗口问题。请注意,此代码仍然不正确,因为您忽略了返回值,在EOS处返回值可以为-1,否则为1到1021之间的任何值。