将大型CSV流写入内存中的ZipOutputStream会占用与CSV或潜在zip的大小相同的内存吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将大型CSV流写入内存中的ZipOutputStream会占用与CSV或潜在zip的大小相同的内存吗?相关的知识,希望对你有一定的参考价值。

我有一个包含大型CSV的Zip。 (因此它是压缩的)我想在CSV中添加一列并再次压缩。

我可以将整个Zip放在内存中,但绝对不是整个CSV。因此,如果我按块将CSV块写入ZipOutputStream的特定ZipEntry(内存中)。它会占用堆中的整个空间,因为CSV数据需要或者需要Zip文件所需的数量吗?

答案

这就是我们通常从zip复制到zip的方式:

        byte[] buffer = new byte[8192];
        while ((currentEntry = zipInputStream.getNextEntry()) != null) {
            ZipEntry newEntry = new ZipEntry(currentEntry.getName());
            zipOutputStream.putNextEntry(newEntry);
            int length;
            while ((length = zipInputStream.read(buffer)) > 0) {
                zipOutputStream.write(buffer, 0, length);
            }
            zipOutputStream.closeEntry();                   
        }

从这段代码中我们可以假设程序将以8k的形式读/写块

以上是关于将大型CSV流写入内存中的ZipOutputStream会占用与CSV或潜在zip的大小相同的内存吗?的主要内容,如果未能解决你的问题,请参考以下文章

java怎么将生成的文件放入内存?

将大型 Spark 数据帧从数据块写入 csv 失败

在python中迭代大型csv文件中的行的最佳方法,写入新的

从 R 中的大型 .CSV 导入和提取随机样本

以内存有效的方式将大型 csv 读入稀疏的 pandas 数据帧

java中输出流不关闭为啥不能写入