在一个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.writingBytes() 返回 10,这表明它已压缩到仅 10 个字节。这似乎是错误的,所以我想知道问题出在哪里。 ChannelBufferOutputStream javadoc 说: 返回到目前为止该流写入的字节数。所以它应该可以工作。
最佳答案
- 在计算字节数之前尝试调用
GZIPOutputStream.finish()
或flush()
方法 - 如果这不起作用,您可以创建一个代理流,其任务是计算通过它的字节数
关于java - 如何使用 Channel BufferOutputStream 检查压缩大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880218/