假设我正在尝试从这样的 Java InputStream 中读取数据:
ZipInputStream zis = new ZipInputStream(new FileInputStream("C:\\temp\\sample3.zip"));
zis.getNextEntry();
byte[] buffer2 = new byte[2];
int count = zis.read(buffer2));
if(count != -1) //process...
else...//something wrong, abort
我正在解析一个二进制文件,在这种情况下我将缓冲区设置为 2,因为我想读取下一个短文件。如果我想读取下一个 int 等其他类型,我会将缓冲区设置为 4。问题是有时 zis.read(buffer) 不会填充缓冲区,即使我知道有足够的未读数据来填充缓冲区。我可以简单地将整个文件内容转储到一个数组中并解析它,但最终我实现了我自己的流阅读器来做这似乎是在重新发明轮子。我还可以实现一个 read() 函数来检查读取计数,如果小于缓冲区大小,则请求更多数据来填充缓冲区,但这既低效又丑陋。有一个更好的方法吗?
这是此处发布的问题的后续问题: