当前位置: 首页 > 知识库问答 >
问题:

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

司寇阳朔
2023-03-14

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

我做了一些研究,试图找出最好的方法。ApacheCommons提供了用于解压缩归档文件的库以及JDK。但我不知道,什么实现使用更少的内存。

我认为,如果我能在压缩的同时打开归档文件,并分别读取和解包包含的文件,那将是最好的。因此,我只需要将压缩的归档文件和其中包含的文件放在内存中。

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

有人有好建议吗?

谢谢你,并致以最良好的问候。

共有1个答案

钱峻
2023-03-14

来自JDK的ZipInputStream正是您所需要的:https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html

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

在这种情况下,您还可以最小化应用程序的占用空间,因为您不需要任何额外的库。

 类似资料:
  • 问题内容: 我正在下载包含XML的压缩文件,由于延迟要求,我希望避免在操作之前将zip文件写入磁盘。但是,这不足以满足我的需求。没有办法说“这是一个zip文件的字节数组,请使用它”而不将其转换为流,并且它不可靠,因为它会扫描条目标头(请参阅EDIT下面的讨论,以了解为什么它不可靠)。 我尚无法访问要处理的zip文件,因此我不知道我是否能够通过来处理它们,因此我需要找到一种适用于任何有效ZIP文件的

  • 我正在尝试解压文件使用Java,它正在编译没有任何错误。当我从工具中调用它,并给出文件的绝对目标路径和源路径时,例如:source:d:\data\test.zip destination:d:\data\op\ 我收到了类似访问被拒绝的错误(我有系统的管理访问权限) 堆栈跟踪: 正在提取:测试/新文本文档-复制(2).txt java.io.FileNotFoundException:d:\da

  • 问题内容: 我想从互联网上下载一个zip文件,然后将其解压缩到内存中而不保存到临时文件中。我怎样才能做到这一点? 这是我尝试过的: [编辑]就像我建议的那样,我尝试使用adm-zip库,但仍然无法完成这项工作: 问题答案: 您需要一个可以处理缓冲区的库。最新版本将: 我的解决方案使用该方法,因为它返回Buffer块。 码: 这个想法是创建一个缓冲区数组,并在最后将它们连接成一个新的缓冲区。这是因为

  • 问题内容: 我从SUN网站(http://java.sun.com/developer/technicalArticles/Programming/compression/)找到了示例,但是它返回BufferedOutputStream。但是我想将ZipEntry文件作为InputStream,然后处理下一个文件。那可能吗?我的程序无法访问硬盘,因此它甚至无法临时保存文件。 问题答案: 好吧,只需

  • 我有多个zip文件在一个文件夹和另一个zip文件存在于每一个这些zip文件夹。我想解压第一个和第二个zip文件夹,并创建它们自己的目录。 这是结构 如上所示,在中,我们有多个zip文件,在每个zip文件中,都存在另一个zip文件。我想解压缩,,和到新的文件夹中。我想使用与父zip文件夹相同的名称来放置每个结果。我尝试了以下答案,但这只解压缩第一个文件夹。 顺便说一句,我在Jenkins管道中运行这

  • 本文向大家介绍Java解压zip文件的关键代码,包括了Java解压zip文件的关键代码的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,给大家贴关键代码了,具体代码如下所示: 好了,代码到此结束,以上所述是小编给大家介绍的Java解压zip文件的关键代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!