【问题标题】:How do I use a ChannelBufferOutputStream to check compression size如何使用 ChannelBufferOutputStream 检查压缩大小
【发布时间】:2012-12-14 14:06:34
【问题描述】:

在一个 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 说:返回到目前为止此流写入的字节数。所以它应该可以工作。

【问题讨论】:

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


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

    【讨论】:

    • 1) 我认为这是问题所在,我没有关闭输出流。谢谢! 2) 我也有同样的想法,commons-io 中有 CountingOutputStream,但是你总是会得到未压缩的大小,因为这是输出流将看到的字节数。
    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2013-09-03
    • 2016-05-22
    • 2020-04-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多