gpt4 book ai didi

java - 将已压缩的文件插入 zip 文件中

转载 作者:行者123 更新时间:2023-12-02 10:58:05 24 4
gpt4 key购买 nike

我一直在寻找这个问题,但找不到任何可以使用的响应。

是否可以(使用java)将已压缩新文件包含在zip文件中在某种程度上,当我解压缩 zip 文件后,这些压缩的文件会以与“膨胀”相同的方式膨胀到 zip 工具,并且合并到要压缩的 zip 中(根据 https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipOutputStream.html#setMethod-int- 在 ZipEntry 中“DEFLETED”)。既然如此,又如何呢?

我从谷歌和其他搜索者那里获得的关于使用 java 压缩 zip 文件的大部分信息都可以在以下位置恢复:

我使用 JZlib 来转移文件(但您可以使用任何其他库。例如 http://www.avajava.com/tutorials/lessons/how-do-i-deflate-and-inflate-a-file.html )

正如您所料,当我尝试插入已经压缩的文件时,它们会再次压缩(使用 ZipEntry 中的 DEFLETED 方法,这是默认值),并且当解压缩 zip 文件时,文件会再次压缩。已放气至之前已放气的状态。

查看oracle的ZipOutputStream.java源码,可以看到向zip添加条目有两种方法:

    DEFLATED (an integer set to 20)
STORED (an integer set to 10)

我想要的是将压缩的条目添加为存储在 zip 中,但是一旦添加它们,就可以更改自己的 zip 中的信息,就像它们被处理为压缩一样。您知道有什么图书馆或任何替代方案可以轻松做到这一点吗?我正在考虑让我自己的ZipOutputStream继承jdk ZipOutputStream并重写方法来实现这一点,但是根据这个想法对方法进行“快速复制粘贴和修改” - 只是为了有一种“它可以工作”的感觉- 也没有按照我的希望工作。

我想要这个选项的原因是根据需要动态压缩 zip 文件中的大量文件。 我不确定这是否可以节省时间和CPU,将压缩的文件保存在数据库中并在每时每刻选择那些需要制作zip的文件。

非常感谢,

最佳答案

zip 格式并不是非常复杂,因此您应该只获取压缩的数据并在其周围编写自己的 zip 文件头。格式记录在 here 。如果您从 gzip 文件中获取压缩数据,那么您还应该已经拥有 CRC 和未压缩长度。 (如果您要转换的每个 gzip 文件都包含一个 deflate 流,即是一个 gzip 成员,并且如果未压缩的长度保证小于 232 字节,那么您可以删除“应该”在该声明中。)

关于java - 将已压缩的文件插入 zip 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51563974/

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