3

Java 6環境でTrueZIPを使用して(クラスを使用して).tar.gz内の1つまたは複数のファイルをランダムにトラバースする方法を理解しようとしています Files。Java 7を使用している例を見つけましたがPath、Java6でアーカイブをランダムに読み取る方法の例を思い付くことができません。

さらに、「ランダムな」読み取りとは、最初にアーカイブ全体を解凍することを意味しますか、それとも圧縮ファイルのセクションを読み取ることを意味しますか?目的は、ファイルを読み取るためだけにすべてを解凍することなく、ファイルからいくつかの基本的な情報を取得したいということです(つまり、ユーザー名)。

4

3 に答える 3

3

gzipファイル(特にファイル)を圧縮するために使用する方法は.tar.gz、通常、出力ファイルがランダムにアクセスできないことを意味します-そのブロックを解凍して現在のブロックまでのシンボルテーブルとその他のコンテキストが必要です。何が入っているか見てください。これは、コンテナ アーカイブに追加する前に各ファイルを個別に圧縮する ZIP/pkzip よりも (ある程度) 優れた圧縮を実現する方法の 1 つです。

したがって、.tar.gzバラバラにするためには、全体を一時ファイルまたはメモリ (大きすぎない場合) に解凍する必要があります。その後、基になる.tarファイルの特定のエントリにジャンプできますが、tarファイルの中央インデックス/ディレクトリが含まれていないため、ヘッダーからヘッダーへとスキップすることにより、順番に実行されます。

于 2012-10-05T15:18:15.483 に答える
1

特にTrueZipについては知りませんが、少なくともZip、RAR、およびTarに関しては、単一のファイルにアクセスしてそれらの詳細を取得し、パッケージの残りの部分に触れることなくそれらを抽出することさえできます.

さらに、「ランダムな」読み取りは、最初にアーカイブ全体を解凍することを意味しますか

TrueZip が Zip/RAR/Tar 形式に従う場合、アーカイブ全体を解凍しません。

目的は、ファイルを読み取るためだけに全体を解凍することなく、ファイルからいくつかの基本情報を取得することです(つまり、ユーザー名)。

以前のように、それで問題ないはずです-特にTrueZip APIについては知りませんが、ファイルコンテナ形式を使用すると、データを1ビットも読み取らずにファイル情報を検査し、オプションで他のものに触れることなくファイルの内容を抽出/読み取ることができますコンテナ内のファイル。

于 2012-10-05T15:15:26.890 に答える
0

zran のソース コード コメントは、そのようなツールがどのように機能するかを説明しています: http://svn.ghostscript.com/ghostscript/tags/zlib-1.2.3/examples/zran.c

結論として、必要なインデックスを生成するには、完全なファイルを処理する必要があると言えます。これは、実際にすべてを解凍するよりもはるかに高速です。インデックスを使用すると、事前にブロックを解凍しなくても解凍できるブロックにファイルを分割できます。これは、ランダム アクセスをエミュレートするために使用されます。

于 2012-10-05T15:16:29.493 に答える