1

RandomAccessFile をファイル システムに書き込む Java アプリケーションがあります。それは RAF でなければなりません。なぜなら、いくつかのことは最後までわからないからです。最後に戻って検索し、ファイルの先頭にいくつかの情報を書き込みます。

どうにかしてファイルをzipアーカイブに入れたいと思います。最後にこれを行うこともできると思いますが、これには、これまでに書き込まれたすべてのデータをコピーする必要があります。これらのファイルは非常に大きくなる可能性があるため、データをコピーする必要のない方法を希望します。

jdkで利用可能なZipOutputStreamのような「ZipRandomAccessFile」のようなものを取得する方法はありますか?

jdk のみである必要はありません。サードパーティのライブラリを使用して作業を完了してもかまいません。

アイデアや提案はありますか..?

4

3 に答える 3

1

シーケンシャルに書き込めるように、ファイル形式を変更する必要があるかもしれません。

実際、これは Zip であり、Zip には複数のエントリを含めることができるため、シーケンシャル データを 1 つのエントリに書き込み、ZipEntry「完了時にのみ」既知のデータを別のエントリに書き込むことができますZipEntry。これにより、両方の長所が得られます。

大きなシーケンシャル チャンクの先頭に戻る必要がないので、簡単に記述できます。読みやすい - コンシューマーがより大きなリソースを読み取る前に「ヘッダー」データを知る必要がある場合、先に進む前にその zip エントリ内のデータを読み取ることができます。

于 2012-09-06T13:13:52.457 に答える
0

DEFLATE フォーマットの指定方法は、最初から読んでみないと意味がありません。そのため、前後にシークするたびに、基になる zip 実装が最​​初からファイルの読み取りを開始する必要があります。また、何かを変更する場合は、最初にファイル全体を解凍する必要があり (変更点までではなく)、解凍したデータに変更を適用してから、全体を再度圧縮します。

要約すると、ZIP/DEFLATE はこのための形式ではありません。ただし、データを小さい固定サイズのファイルに分割し、個別に圧縮することは可能です。

于 2012-09-06T12:48:39.377 に答える