我正在尝试理解如何在Java6环境中使用TrueZIP随机遍历.tar.gz中的一个或多个文件(使用Files类)。我找到了使用Java7的Path的实例,但是,我想不出如何在Java6上随机读取归档文件的示例。
此外,“随机”读取是否意味着它首先解压缩整个归档,还是读取压缩文件中的部分?这样做的目的是,我想从文件中检索一些基本信息,而不必解压缩整个东西来读取它(即用户名)。
发布于 2012-10-05 23:15:27
我并不特别了解TrueZip,但至少在Zip、RAR和Tar方面,你可以访问单个文件并检索有关它们的详细信息,甚至可以在不接触包的其余部分的情况下提取它们。
另外,随机读取是否意味着它首先解压缩整个归档
如果TrueZip遵循Zip/RAR/Tar格式,那么它不会解压缩整个归档。
的目的是,我想从文件中检索一些基本信息,而不必解压缩整个文件来读取它(即用户名)。
和以前一样,这应该很好--我不是特别了解TrueZip API,但是文件容器格式允许您在不读取任何数据的情况下检查文件信息,并且可以选择提取/读取文件内容,而不需要接触容器中的任何其他文件。
发布于 2012-10-05 23:18:15
gzip用于压缩文件(尤其是.tar.gz文件)的方法通常意味着输出文件不是随机可访问的-您需要整个文件到当前块的符号表和其他上下文,才能解压缩该块以查看其中的内容。这是它在ZIP/pkzip上实现(某种程度上)更好的压缩的方法之一,在将每个文件添加到容器存档之前,它会单独压缩每个文件,从而能够搜索到特定文件并解压缩该文件。
因此,为了拆分.tar.gz,您需要将整个内容解压缩到一个临时文件或内存中(如果它不是太大),然后您可以跳转到底层.tar文件中的特定条目,尽管这必须通过从一个标题跳到另一个标题来顺序完成,因为tar不包括文件的中央索引/目录。
发布于 2012-10-05 23:16:29
zran的源代码注释描述了这些工具是如何工作的:http://svn.ghostscript.com/ghostscript/tags/zlib-1.2.3/examples/zran.c
总而言之,可以说必须对整个文件进行处理以生成必要的索引。这比实际解压一切都要快得多。该索引允许将文件拆分成可解压缩的块,而不必先解压缩这些块。用于模拟随机访问的。
https://stackoverflow.com/questions/12748764
复制相似问题