如何使用ChannelBufferOutputStream检查压缩大小

时间:2012-12-14 14:06:34

标签: java netty apache-commons java-io apache-commons-io

在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());         
}

我正在使用json文件测试此代码,该文件大约是31.000字节未压缩,并且在磁盘上压缩了大约7.000字节。发送一个将未压缩的json文件包装到上面的代码的InputStream,outputStream.writtenBytes()返回10,这表示它压缩到只有10个字节。这似乎不对,所以我想知道问题出在哪里。 ChannelBufferOutputStream javadoc说:到目前为止,返回此流的写入字节数。所以应该有效。

1 个答案:

答案 0 :(得分:3)

  1. 在计算字节
  2. 之前尝试调用GZIPOutputStream.finish()flush()方法
  3. 如果这不起作用,您可以创建一个代理流,其任务 - 计算通过它的字节数