我正在以 1021 字节的块读取任意大小的文件,文件的最后一个块的块大小为 <= 1021 字节。目前,我正在使用一个BufferedInputStream
包裹在 a 周围的 aFileInputStream
和看起来(大致)如下所示的代码(在哪里reader
并且BufferedInputStream
this 在循环中运行):
int availableData = reader.available();
int datalen = (availableData >= 1021)
? 1021
: availableData;
reader.read(bufferArray, 0, datalen);
但是,通过阅读 API 文档,我注意到available()
在调用“阻塞”之前只给出了可用大小的“估计”。打印出availableData
每次迭代的值似乎给出了预期值 - 从文件大小开始,慢慢变小,直到它 <= 1021。鉴于这是一个本地文件,我认为这是一个正确的值是错误的 -有没有available()
会给出错误答案的情况?
编辑:对不起,附加信息。被BufferedInputStream
包裹在一个FileInputStream
. 从 FIS 的源代码来看,我认为我可以安全地依赖 available() 作为在本地文件的情况下剩余多少数据的度量。我对吗?