-1

我正在尝试解压缩一个 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();
      }

我确实阅读了文档,但我发现它令人困惑,请帮助。

4

1 回答 1

1

我有问题了解如何ZipInputStream.read(byte[])工作。

它在javadocs中描述为InputStream.read(bytes[])

这段代码工作得很好,但我不知道我的文件是否大于我设置如何操作的缓冲区。

这就是循环的用途。

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

它一次读取一个缓冲区,设置len为读取的字节数,直到read调用返回零(或更少)。写入每个缓冲区满是len用来说明要写入多少字节,然后重复...

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

读取流是这种习惯用法常用的一种情况。值得记住它。

于 2016-10-20T04:00:26.890 回答