gpt4 book ai didi

java - 通过java高效地压缩文件

转载 作者:行者123 更新时间:2023-12-01 14:11:02 24 4
gpt4 key购买 nike

我正在生成一个大小为 1 GB 的文件,现在我必须通过 java 本身压缩该文件。

FileOutputStream fileOutput = new FileOutputStream(
file);

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
fileOutput));

addContent(abc, def, bw);

bw.close();
fileOutput.close();

请告知,因为我正在寻找一种自定义方法,该方法将接受文件名和文件路径作为参数并压缩文件,如下所示:

        public void generatezipforafie( folderpath, filename)
{

//please advise the logic to zip the file

}

最佳答案

我假设您的术语“高效”意味着尽可能快。您可以使用 GZIPOutpuStream 来压缩一个大文件,也可以使用 ZipOutputStream 来压缩多个文件并将它们连接到一个 zip 库中。标准 javadoc 中对这两者都有很好的解释。

长话短说,为了提高效率 - 同时使用更多的 CPU - 将大文件分成 block ,让不同的线程同时压缩它们并连接输出。在接收方只需执行相同的操作,反之亦然。

标准 zip 类的一个缺点是它们都在一个 CPU/核心上以单线程方式工作。因此,按照您的说法,他们可能效率不高。这是因为压缩算法本身是单线程的。现有的并行版本采用数据 block 并将它们压缩到不同的线程中。然后他们就有相应的解压逻辑。通过在网上搜索 PIGZ,您将找到大量与此相关的 Material 。

根据@VictorSeifert的评论进行编辑

压缩率主要取决于三个因素:您的数据(显然)、压缩深度和 block 大小。可以使用 setLevel() 在 java 类中控制压缩深度。 block 大小可以自由选择。 block 越大,压缩效果越好,但可实现的并行性越差。

例如,PIGZ 默认使用 128 kb block 并维护 32kb 字典,以便 block 与 block 之间的压缩效果更好。我自己在没有字典的情况下使用 1mb block 取得了很好的结果。字典给线程模型增加了很多复杂性,而我的问题到目前为止还不够大,无法解决这个问题。

关于java - 通过java高效地压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18528616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com