見ているものを正確に絞り込むのに役立つ場合があります。
通常、データ全体の前に 2 バイトのZLIB ヘッダーがあります。私の知る限り、これらの最初のバイトの下位 4 ビットは常に 8 である必要があります。デフレーターを nowrap モードで初期化すると、これらの 2 バイトはまったく取得されません (ただし、他のライブラリはそれらを取得しないことを想定している必要があります)。
次に、個々のデータ ブロックの前に、3 ビットのブロック ヘッダーがあります (整数のバイト数ではなく、ビット数として定義されることに注意してください)。おそらく、最終ブロックである圧縮ブロックを示すバイト 5 で始まるブロック、または非圧縮の非最終ブロックであるバイト 8 で始まるブロックを持つことができます。
DeflaterOutputStream を作成するときに、Deflater または選択したものをコンストラクターに渡すことができます。その Deflater には、設定できるオプションがいくつかあります。レベルは基本的に、データ内の繰り返しパターンを探すときに圧縮が使用する先読みの量です。場合によっては、これをデフォルト以外の値に設定してみて、解凍プログラムが処理できるかどうかに違いがあるかどうかを確認してください。
ストラテジー設定 ( setStrategy() メソッドを参照) は、ハフマン圧縮のみを適用するようにデフレーターに指示するために、いくつかの特別な状況で使用できます。これは、値の度数が 2 の負の累乗に近い値 (つまり、ハフマン コーディングが最適に機能する分布) になるようにデータを既に変換している場合に役立つことがあります。この設定がライブラリがデータを読み取れるかどうかに影響するとは思いませんが、偶然に、この設定を変更してみてください。
役立つ場合は、変換されたデータでのハフマンのみの圧縮の使用など、 Deflater の構成について少し書きました。どのようなオプションを選択したとしても、ライブラリがデータを読み取れることを本当に期待しています。圧縮データが正しいと確信している場合 (つまり、ZLIB/Inflater がファイルを再読み込みできる場合)、別のライブラリを使用することを検討してください...!
ああ、出血は明らかですが、とにかく言及します。データが修正されている場合は、もちろんそれを瓶に貼り付けるだけで、効果的に「無料で」収縮/膨張します。皮肉なことに、J2ME デバイスは zlib で圧縮されたデータをデコードできなければなりません。