我有以下要求: 我需要解压 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
方法允许您实现缓冲读取,因此,如果您不需要内存中的整个解压缩条目(即,如果您将条目写入输出,则可以轻松限制内存消耗)阅读它)。
在这种情况下,您也可以最大限度地减少应用程序的占用空间,因为您不需要任何额外的库。
关于Java:如何解压缩内存使用率较低的文件(zip或tar.gz)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43735272/