7-Zip作者提供的原生Java LZMA SDK可以正常工作,但不足以满足我的需求。高级实现似乎无法处理算法所需的低级别工作。
我找到了7-Zip-JBinding,它在C ++ dll上实现了JNI封面,它附带了7-Zip。这会以合理的速度处理解压缩,但它处于测试版状态,目前不支持压缩。
无论如何,我的问题分为两部分:
答案 0 :(得分:0)
它可能不是您的选择,但我在使用ProcessBuilder执行外部7z进程方面取得了很大的成功。使用LZMA2并降低压缩级别也大大加快了压缩时间。当然有便携性问题。
您可能想查看XZ for Java。 XZ使用LZMA2压缩,但具有更适合Unix环境的不同格式。最新的7zip应该能够提取.XZ档案。
答案 1 :(得分:0)
查看Apache Commons Compress,它具有LZMA2格式的出色API。使用的实现是XZ for Java,因此您还需要将此依赖项添加到您的代码中。 Examples页面有一个代码段,显示了如何使用XZCompressorInputStream进行解压缩:
FileInputStream fin = new FileInputStream("archive.tar.xz");
BufferedInputStream in = new BufferedInputStream(fin);
FileOutputStream out = new FileOutputStream("archive.tar");
XZCompressorInputStream xzIn = new XZCompressorInputStream(in);
final byte[] buffer = new byte[buffersize];
int n = 0;
while (-1 != (n = xzIn.read(buffer))) {
out.write(buffer, 0, n);
}
out.close();
xzIn.close();
你应该知道LZMA是一种弃用的格式--Apache Commons Compress只支持读取这种格式,XZ for Java也是如此。 LZMA2包含在XZ存档格式中,但这绝对是要走的路,因为它是支持的算法/格式,也可以在其他平台上使用。 Linux上还有一个名为" xz"的命令行工具。可用于压缩/解压缩文件。