2

Java プログラムでは、次のように InputStream を圧縮しています。

ChannelBufferOutputStream outputStream = new ChannelBufferOutputStream(ChannelBuffers.dynamicBuffer(BUFFER_SIZE));
GZIPOutputStream compressedOutputStream = new GZIPOutputStream(outputStream);
try {
   IOUtils.copy(inputStream, compressedOutputStream);
} finally {
   // this should print the byte size after compression
   System.out.println(outputStream.writtenBytes());         
}

ディスク上で圧縮されていない ~31.000 バイトと圧縮された ~7.000 バイトの json ファイルを使用して、このコードをテストしています。圧縮されていない json ファイルをラップしている InputStream を上記のコードに送信すると、outputStream.writtenBytes() は 10 を返します。これは、10 バイトまで圧縮されたことを示します。それは間違っているように思えるので、どこに問題があるのだろうか。ChannelBufferOutputStream javadoc によると、これまでにこのストリームによって書き込まれたバイト数を返します。だからそれはうまくいくはずです。

4

1 に答える 1

3
  1. バイト数をカウントする前にGZIPOutputStream.finish()またはメソッドを呼び出してみてくださいflush()
  2. それが機能しない場合は、プロキシ ストリームを作成できます。その使命は、通過したバイト数をカウントすることです。
于 2012-12-15T16:55:53.533 に答える