我有一个由7zip程序创建的文件.我使用deflate方法来压缩它.现在我想创建相同的存档(具有相同的MD5sum)java.当我创建zip文件时,我使用了我在互联网上找到的算法,例如http://www.kodejava.org/examples/119.html但是当我用这种方法创建zip文件时,压缩的大小高于未压缩的文件是怎么回事?这不是一个非常有用的压缩.那么如何创建与我用7zip程序创建的zip文件完全相同的zip文件呢?如果它有助于我获得有关我在7zip程序中创建的zip文件的所有信息.
小智 60
// simplified code for zip creation in java
import java.io.*;
import java.util.zip.*;
public class ZipCreateExample {
public static void main(String[] args) throws Exception {
// input file
FileInputStream in = new FileInputStream("F:/sometxt.txt");
// out put file
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("F:/tmp.zip"));
// name the file inside the zip file
out.putNextEntry(new ZipEntry("zippedjava.txt"));
// buffer size
byte[] b = new byte[1024];
int count;
while ((count = in.read(b)) > 0) {
out.write(b, 0, count);
}
out.close();
in.close();
}
}
Run Code Online (Sandbox Code Playgroud)
只是为了澄清一下,你在7zip中使用ZIP算法作为原始版本?此外,7zip声称压缩率比其他供应商高2-10%.我猜想Java中内置的ZIP算法并不像7zip那样优化.如果你想要一个类似的压缩文件,最好的方法是从命令行调用7zip.
您是否尝试解压缩ZIP文件,更改其中的文件,然后重新压缩它以使其具有相同的MD5哈希?哈希意味着阻止你这样做.
ZipOutputStream几乎没有调整压缩的方法:
public void setMethod(int method)
设置后续条目的默认压缩方法.只要没有为单个ZIP文件条目指定压缩方法,就会使用此默认值,并且最初设置为DEFLATED.
public void setLevel(int level)
设置DEFLATED后续条目的压缩级别.默认设置为DEFAULT_COMPRESSION.级别 - 压缩级别(0-9)
当您添加以下内容后:
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(target));
zos.setMethod( ZipOutputStream.DEFLATED );
zos.setLevel( 5 );
...
Run Code Online (Sandbox Code Playgroud)
它不会改善您的压缩吗?
| 归档时间: |
|
| 查看次数: |
84593 次 |
| 最近记录: |