【问题标题】:Java: How to decompress files (zip or tar.gz) with low memory usage?Java:如何解压缩内存使用率低的文件(zip 或 tar.gz)?
【发布时间】:2023-03-31 16:44:01
【问题描述】:

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

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

我认为,如果我能在压缩文件仍处于压缩状态时打开它,并分别读取和解压缩包含的文件,那将是最好的。因此,我只需将压缩存档及其包含文件之一保存在内存中。

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

有什么好的建议吗?

谢谢你和最好的问候。

【问题讨论】:

  • 您是否尝试过任何选项并测量内存使用情况?

标签: java performance memory aem archive


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 2011-10-30
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2013-04-27
    相关资源
    最近更新 更多