Java: 如何解压低内存占用的文件(zip 或 tar.gz)?

Java: How to decompress files (zip or tar.gz) with low memory usage?

我有以下需求: 我需要解压一个 zip 或 tar.gz 文件。此代码 运行 所在的目标平台是 AEM 6.1 环境。该系统过去存在一些性能问题。特别是内存使用率非常高。因此我必须保存内存。 zip/tar.gz 文件包含一些文本文件、SVG、PNG 和 EPS 文件以及更多我不需要的文件。存档文件将作为 ByteArrayInputStream 下载并提供。

我做了一些研究并试图弄清楚,这是最好的方法。 Apache commons 提供了用于解压缩存档的库以及 JDK。但是我想不通,什么实现使用的内存更少。

我想,如果我能在压缩包打开时打开压缩包,然后分别读取和解压包含的文件,那将是最好的。所以我只需要压缩存档及其包含文件之一在内存中。

但我不确定,哪个实现提供了这种可能性,或者是否有更好的方法。

有什么好的建议吗?

谢谢你,并致以最诚挚的问候。

JDK 中的

ZipInputStream 可以满足您的需求:https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html

您可以通过getNextEntry().getName()找到您需要的条目,并读取该条目的字节。 ZipInputStream.read 方法允许您实现缓冲读取,因此如果您不需要内存中的整个解压缩条目(即,如果您在读取时将条目写入输出),您可以轻松地限制内存消耗。

在这种情况下,您也可以最大限度地减少应用程序的占用空间,因为您不需要任何额外的库。