我有以下要求: 我需要解压缩zip或tar.gz文件。运行此代码的目标平台是AEM 6.1环境。该系统过去存在一些性能问题。特别是内存使用量很高。因此我必须节省内存。 zip / tar.gz文件包含一些文本文件,SVG,PNG和EPS文件以及我不需要的更多文件。存档文件将被下载并作为ByteArrayInputStream提供。
我做了一些研究并试图弄清楚,这是最好的方法。 Apache commons提供了解压缩归档文件和JDK的库。但我无法弄清楚,什么实现使用更少的内存。
我认为,如果我可以在压缩文件中打开存档,那么它将是最好的,并且可以单独读取和解压缩包含的文件。所以我只需将压缩存档及其包含的文件存储在内存中。
但我不确定,哪种实现提供了这种可能性,或者是否有更好的方法可以做到这一点。
有人有个好建议吗?
谢谢你,并致以最诚挚的问候。
答案 0 :(得分:2)
ZipInputStream
可以满足您的需求:https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html
您可以通过getNextEntry().getName()
找到所需的条目,并读取该条目的字节数。 ZipInputStream.read
方法允许您实现缓冲读取,因此如果您不需要内存中的整个解压缩条目(例如,如果您在读取时将条目写入输出),则可以轻松限制内存消耗。
在这种情况下,您也可以最小化应用程序的占用空间,因为您不需要任何额外的库。