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

标签 java performance memory aem archive

我有以下要求: 我需要解压 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/

相关文章:

java - 关于事务和事件监听器

C++:Switch 语句与查找表的性能

python - 使用 Theano 在 CPU 上训练简单的 MLP 时,内存逐渐增加直至崩溃

php - 如何在不发生内存崩溃的情况下将大块存储到 json 文件中?

java - 在 SOAP header 请求中添加元素以进行身份​​验证

java - ajax POST + spring Controller 参数传递错误

Java 8 方法引用多个不同的构造函数

c - 如何避免使用多个 "if then"来检查参数?

c++ - 对齐数据成员和成员函数以提高性能

java - java中已提交内存的确切状态