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 によると、これまでにこのストリームによって書き込まれたバイト数を返します。だからそれはうまくいくはずです。