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
方法允许您实现缓冲读取,因此如果您不需要内存中的整个解压缩条目(即,如果您在读取时将条目写入输出),您可以轻松地限制内存消耗。
在这种情况下,您也可以最大限度地减少应用程序的占用空间,因为您不需要任何额外的库。
我有以下需求: 我需要解压一个 zip 或 tar.gz 文件。此代码 运行 所在的目标平台是 AEM 6.1 环境。该系统过去存在一些性能问题。特别是内存使用率非常高。因此我必须保存内存。 zip/tar.gz 文件包含一些文本文件、SVG、PNG 和 EPS 文件以及更多我不需要的文件。存档文件将作为 ByteArrayInputStream 下载并提供。
我做了一些研究并试图弄清楚,这是最好的方法。 Apache commons 提供了用于解压缩存档的库以及 JDK。但是我想不通,什么实现使用的内存更少。
我想,如果我能在压缩包打开时打开压缩包,然后分别读取和解压包含的文件,那将是最好的。所以我只需要压缩存档及其包含文件之一在内存中。
但我不确定,哪个实现提供了这种可能性,或者是否有更好的方法。
有什么好的建议吗?
谢谢你,并致以最诚挚的问候。
ZipInputStream
可以满足您的需求:https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html
您可以通过getNextEntry().getName()
找到您需要的条目,并读取该条目的字节。 ZipInputStream.read
方法允许您实现缓冲读取,因此如果您不需要内存中的整个解压缩条目(即,如果您在读取时将条目写入输出),您可以轻松地限制内存消耗。
在这种情况下,您也可以最大限度地减少应用程序的占用空间,因为您不需要任何额外的库。