如何使用LZMA SDK在Java中压缩/解压缩

lam*_*988 16 java 7zip lzma

http://www.7-zip.org/sdk.html 这个网站提供了一个用于压缩/解压缩文件的LZMA SDK,我想试一试,但我迷路了.

有人有这方面的经验吗?还是教程?谢谢.

Ste*_*ini 38

简答:不要

7zip sdk是旧的,没有维护,它只是围绕C++库的JNI包装器.现代JVM(1.7 +)上的纯Java实现与C++一样快,并且具有较少的依赖性和可移植性问题.

看看http://tukaani.org/xz/java.html

XZ是基于LZMA2(LZMA的改进版本)的文件格式

发明XZ格式的人构建了XZ归档压缩/提取算法的纯java实现

XZ文件格式仅用于存储1个文件.因此,您需要先将源文件夹压缩/ tar到一个未压缩的文件中.

使用java库就像这样简单:

FileInputStream inFile = new FileInputStream("src.tar");
FileOutputStream outfile = new FileOutputStream("src.tar.xz");

LZMA2Options options = new LZMA2Options();

options.setPreset(7); // play with this number: 6 is default but 7 works better for mid sized archives ( > 8mb)

XZOutputStream out = new XZOutputStream(outfile, options);

byte[] buf = new byte[8192];
int size;
while ((size = inFile.read(buf)) != -1)
   out.write(buf, 0, size);

out.finish();
Run Code Online (Sandbox Code Playgroud)

  • 你在Sun/Oracle JVM上是对的,它和C++一样快.不幸的是,在Android上这种类型的操作仍然慢了5倍 - 甚至更慢(即使在带有ART的Android 6上).这令人沮丧. (4认同)
  • 这是一个相当古老的答案,我建议的图书馆可能已经被更新/更好的东西所取代.它的要点是7zip sdk是旧的并且没有维护,它只是围绕C++库的JNI包装器.现代JVM(1.7 +)上的纯Java实现与C++一样快,并且具有较少的依赖性和可移植性问题.只需2美分. (3认同)
  • 如果您使用的是Maven:http://mvnrepository.com/artifact/org.tukaani/xz (3认同)

Eve*_*man 4

从您发布的链接中查看 zip 文件的 Java/SevenZip 文件夹中的 LzmaAlone.java 和 LzmaBench.java 文件。

  • 是的,他们应该制作一些文档(或 javadoc),但有时您必须查看示例代码,这就是我指导您的。 (2认同)