提问者:小点点

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


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

我做了一些研究,试图找出最好的方法。ApacheCommons提供了用于解压缩归档文件的库以及JDK。但我不知道,什么实现使用更少的内存。

我认为,如果我能在压缩的同时打开归档文件,并分别读取和解包包含的文件,那将是最好的。因此,我只需要将压缩的归档文件和其中包含的文件放在内存中。

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

有人有好建议吗?

谢谢你,并致以最良好的问候。


共1个答案

匿名用户

来自JDK的ZipInputStream正是您所需要的:https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html

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

在这种情况下,您还可以最小化应用程序的占用空间,因为您不需要任何额外的库。