2011-10-11 46 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'的源代碼。也許你可以把代碼中的「緩衝區輸入」部分替換成可以與你的解碼器交談的東西。 –