2011-10-11 106 views
1

我有压缩文件,我想使用像unix中的“少”实用程序来查看。 “less”提供了预处理选项,我可以通过它来解压文件。但是,如果我想部分解压缩文件(作为预处理的一部分),并将输出指向/输出较少?这具有仅解压缩文件的一部分的优点。如何仅通过部分解压缩来查看压缩文件?

如果有任何其他方式通过部分解压缩来查看压缩文件,请让我知道。

感谢, 拉胡尔

+0

您如何知道25KB的压缩文件是您感兴趣的部分? (此外,一些压缩方案必须从头开始解压缩文件,即使它们可能只是在某个时刻停止。) –

+0

我的文件中有一些标签,告诉我数据在哪里。我需要在“少”预处理的线上的东西,所以我可以给解压缩的文件块“少”。 – Rahul

+0

所以你基本上使用.gz.tar而不是.tar.gz?听起来不错。 :) –

回答

1

你需要想出这个你自己的压缩格式;所有现有库(gzip,bzip2,lzma)都是流式处理,但不是分块处理(即无法在压缩流中搜索)。

一种解决方案是创建一个类似于ZIP存档的文件:一个条目流,后跟一个目录表(TOC)。在你的情况下,条目(=块)将在压缩之前都具有相同的大小。

尝试4KB块大小;这应该仍然能够提供非常好的压缩,合理的开销和每个块的快速解压缩时间。将压缩的块写入一个文件并在TOC中记录每个文件的起始偏移量。

在流中查找时,找到所需的4KB偏移量,读取TOC的偏移量,读取压缩的块并解压缩。

[编辑]您需要创建一个小工具,它可以在存档中的任何位置开始解压缩,并且只需要继续解压直到达到EOF。但是您可能想知道文件less当前正在显示的部分。没有简单的解决方案。 less旨在显示流。它不能在那里“寻找”;而不是less将创建一个缓冲区,在其中它可以寻找。如果你想避免这种情况(通常是因为文件太大),你必须编写自己的版本less

或者,查看less的源代码。也许你可以把代码中的“缓冲区输入”部分替换成可以与你的解码器交谈的东西。

+0

感谢您的回复。我已经在使用你所说的解决方案。但是,我想将一些解压缩的数据块传送到“较少”的位置。当用户到达这个块的末尾时,我需要一种方法来解压缩文件中的下一个块。 – Rahul

+0

您需要创建一个小工具,该工具可以在存档中的任何位置开始解压缩,并且只需要继续解压直到达到EOF。但是你可能想知道'less'文件的哪个部分当前正在显示。没有简单的解决方案。 'less'旨在显示一个流。它不能在那里“寻找”;相反,'less'会在某处寻找缓冲区。如果你想避免这种情况(通常是因为文件太大),你必须编写你自己版本的'less' –

+0

或者,看看'less'的源代码。也许你可以把代码中的“缓冲区输入”部分替换成可以与你的解码器交谈的东西。 –