InputStream.read(byte[]) 是如何工作的?

How does InputStream.read(byte[]) work?

我正在尝试解压缩一个 zip 文件夹,但我无法理解 ZipInputStream.read(byte[]) 的工作原理。这段代码工作正常,但我不知道我的文件是否大于我设置的缓冲区,我将如何操作。

byte[] buffer = new byte[1024];
zipIs = new ZipInputStream(new FileInputStream(FILE_PATH));
while ((entry = zipIs.getNextEntry()) != null) {

        String entryName = File.separator + entry.getName();

        // Call file input stream
        FileOutputStream fos = new FileOutputStream(entryName);

        int len;
        // Write current entry
        while ((len = zipIs.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }
        fos.close();
      }

我确实阅读了文档,但我觉得它很混乱,请帮忙。

I have problem understand how the ZipInputStream.read(byte[]) work.

javadocs 中描述了 InputStream.read(bytes[])

This code work just fine but i don't know if my file is bigger than the buffer i set how i'll operate.

这就是循环的用途。

    while ((len = zipIs.read(buffer)) > 0) {
        fos.write(buffer, 0, len);
    }

它一次读取一个缓冲区,将 len 设置为读取的字节数,直到 read 调用 returns 零(或更少)。每个缓冲区满都使用 len 表示要写入多少字节,然后重复...

while ((a = call()) > 0) { 语法只是利用了这样一个事实,即赋值(例如 (a = call()))是一个表达式,其值是分配给变量的值。

阅读流是这个成语常用的一种情况。值得记住。