シーンの説明:
リーリー問題は、受信したものが完全な圧縮ファイルではなくバイナリデータのブロックであるため、情報が不完全なために受信したデータを解凍できないことです
ここで、このような機能を実装したいと思います。まず、受信したストリーム データを解凍し、完全なデータに復元します (元のログ データは改行で区切られており、各ストリーム データの圧縮前のテキストとそのオフセットを取得できます)対応するファイル)良い)を選択し、送信や保存などの処理でデータエラーが発生する可能性があることを考慮し、各データストリームでエラーが発生した場合に可能な限り多くのデータを解凍します。
関連コードの一部は次のとおりです: (https://stackoverflow.com/que... から変更)
リーリーi>=3 の場合、ループ内で毎回エラーが報告されます。
私の結論は、ストリームが連続していない (データの一部を受信するためにスキップしている) 場合、後続のデータを解凍できないということです。
質問 1: 受信したデータの各部分を正しく解凍できたらどうなるでしょうか? (gzip圧縮のアルゴリズムやデータ構造に関係する可能性があるため、該当するコードを調べています。送信ヘッダに特定のチャックを追加するか、解凍する必要があるデータの前後に何らかのチャックを追加することで問題が解決できる場合は、 、それは考えられます)
質問 2:
受信したデータのすべての部分を正しく解凍できない場合、できるだけ多くのデータを解凍するにはどうすればよいですか?
エラーが発生した場合に送信を再開する機能を作成できると思います。送信する前に現在のデータストリームをバックアップしてください。現在のデータストリームが完全に送信されたかどうかを判断する必要があります。これには、送信機と受信機間の送信プロトコルを変更できる必要があります。エラーが発生した場合は、送信機に直ちに失敗が報告され、エラーがなければ、送信が再開されます。報告され、次のセクションが送信されます。これにより、データの整合性が確保されます。ファイルが大きすぎる場合は、より多くのデータセグメントをメモリにバックアップし、詳細な判断を行うことができます。
あなたが説明した問題についてはわかりませんが、stackoverflow のいくつかの質問と回答が役に立つかもしれません。
zlib を使用して gzip ストリームを解凍するにはどうすればよいですか?
Python で gzip をチャンクごとに解凍します