TrueZip随机访问功能

时间:2012-10-05 14:49:48

标签: java compression gzip truezip archive-tar

我正在尝试了解如何在Java 6环境中使用TrueZIP随机遍历.tar.gz中的文件/文件(使用Files类)。我找到了使用Java 7 Path的实例,但是,我无法想出如何在Java 6上随机读取存档的示例。

此外,“随机”读取是否意味着它首先解压缩整个存档,还是读取压缩文件中的部分?目的是我想从文件中检索一些基本信息,而不必解压缩整个东西只是为了阅读它(即用户名)。

3 个答案:

答案 0 :(得分:3)

gzip用于压缩文件的方法(尤其是.tar.gz文件)通常意味着输出文件不是随机可访问的 - 您需要符号表和整个文件中的其他上下文到当前块甚至能够解压缩该块以查看其中的内容。这是通过ZIP / pkzip实现(稍微)更好的压缩的方法之一,ZIP / pkzip在将每个文件添加到容器存档之前单独压缩它们,从而能够搜索特定文件并解压缩该文件。

所以,为了选择一个.tar.gz,你需要解压缩整个事件,无论是临时文件还是内存(如果它不是太大),那么你可以跳转到特定条目基础.tar文件,虽然必须通过从标题跳转到标题来顺序完成,因为tar不包含文件的中央索引/目录。

答案 1 :(得分:1)

我并不特别了解TrueZip,但至少在Zip,RAR和Tar方面,您可以访问单个文件并检索有关它们的详细信息,甚至可以在不触及包的其余部分的情况下提取它们。

  

此外,“随机”读数是否意味着它首先解压缩   整个档案

如果TrueZip遵循Zip / RAR / Tar格式,那么它解压缩整个档案。

  

目的是我想从中检索一些基本信息   文件,而不必解压缩整个事情只是为了阅读它(即   用户名)。

如前所述,这应该没问题 - 我特别不了解TrueZip API,但文件容器格式允许您在不读取数据的情况下检查文件信息,并可选择提取/读取文件内容触摸容器中的任何其他文件。

答案 2 :(得分:0)

zran的源代码注释描述了这些工具是如何工作的: http://svn.ghostscript.com/ghostscript/tags/zlib-1.2.3/examples/zran.c

总之,可以说必须处理完整的文件以生成必要的索引。 这比实际解压缩一切要快得多。 索引允许将文件拆分为可以解压缩的块,而无需先解压缩块。这用于模拟随机访问。