【问题标题】:Extract two files from tar.gz file into memory从 tar.gz 文件中提取两个文件到内存中
【发布时间】:2014-02-10 10:16:11
【问题描述】:

我有 GZIP 存档,其中包含两个文件,其中包含 tar 实用程序。我需要将它们都提取到内存中。所以我需要得到两个byte 数组作为结果。但是GZIPInputStream 用法的所有示例都只是读取字节并将它们保存到输出流中,所以我不知道如何获得两个byte[] 数组作为结果。

【问题讨论】:

  • "我有 GZIP 存档,里面有两个文件。" GZIP 不能那样工作。它没有多个文件的概念。它只是压缩数据。
  • @JonSkeet 我的错误,我已经更新了问题。
  • 那么你的意思是你有一个 tar.gz 文件,还是一个 tgz 文件?如果是这样,您需要将提取的 gzip 部分与 tar 部分分开。当你解压 gzip 文件时,你会得到一个 tar 文件,然后你可以从中得到这两个文件。
  • @JonSkeet tar.gz。使用 .tar 文件的任何示例?请注意,我不想创建任何临时文件。这可能吗?
  • 我自己没有使用过任何 tar 库 - 不过请参阅 code.google.com/p/jtar

标签: java android gzip


【解决方案1】:

libarchive 应该做你需要的。以下是他们主页的摘录,描述了它是什么:

库文件


多格式存档和压缩库

源代码分发包括 libarchive 库、bsdtar 和 bsdcpio 命令行程序、完整的测试套件和文档:

稳定版:libarchive-3.1.2.tar.gzlibarchive-3.1.2.zip(自 2013 年 1 月 13 日起)
旧版:libarchive-2.8.5.zip(自 2011 年 9 月 3 日起)

libarchive 库功能:

  • 支持多种存档和压缩格式。

  • 强大的自动格式检测,包括归档/压缩组合,例如 tar.gz。

  • 实现高性能的零拷贝内部架构。

  • 流式架构消除了对存档大小的所有限制,条目大小的限制取决于特定格式。

  • 仔细分解代码以在静态链接程序时最大限度地减少膨胀。

  • 不断增加测试套件以验证新端口的正确性。

  • 适用于大多数类似 POSIX 的系统(包括 FreeBSD、Linux、Solaris 等)

  • 支持 Windows,包括 Cygwin、MinGW 和 Visual Studio。

bsdtarbscpio 命令行实用程序在功能和性能方面与其他 tar 和 cpio 实现具有竞争力:

  • 读取多种格式,包括 tar、pax、cpio、zip、xar、lha、ar、cab、mtree、rar 和 ISO 映像。

  • 写入 tar、pax、cpio、zip、xar、ar、ISO、mtree 和 shar 档案。

  • 自动处理使用 gzip、bzip2、lzip、xz、lzma 或 compress 压缩的档案。

  • 独特的格式转换功能。

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 如果我提供了关于如何使用 libarchive 的“基本部分”,并且链接消失了,那么这些基本部分变得毫无用处。我了解链接的波动性,但如果链接消失,我不知道如何改进答案。
  • 这根本不是真的。链接可以更改。断开的链接并不意味着产品不再存在或变得无用。别担心,我继续编辑了您的答案,添加了他们主页上的所有重要部分,以向未来的访问者解释什么是 libarchive。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
相关资源
最近更新 更多