【问题标题】:Problems with BZIP-OutputStreamBZIP-OutputStream 的问题
【发布时间】:2011-05-20 13:17:04
【问题描述】:

首先是一些代码:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
CBZip2OutputStream zos = new CBZip2OutputStream(bos);

provider.sendXMLFilelist(zos);
zos.flush();
bos.flush();

length = bos.size();

“provider”向“zos”发送(比如说)200 个字节。但是length == 1。我知道 bzip 很好,但是 1 字节似乎少了一点。

当我这样做时:provider.sendXMLFilelist(bos); 比长度 == 200。

为什么 CBZip2OutputStream 不输出他所有的压缩字节?

我正在使用这个实现:http://www.kohsuke.org/bzip2/

【问题讨论】:

    标签: java stream buffer bzip


    【解决方案1】:

    我想我现在有了答案。你必须.close() bzip2 流。 Bzip2 是一个块编解码器,它不知道是否必须填充数据或是否还有更多。

    因此,通过告诉他关闭流,他可以输出所有压缩数据。

    【讨论】:

    • 总是关闭流是一个好习惯,无论如何我的荣誉:)
    【解决方案2】:

    我过去曾遇到过这个库实现的问题,我建议您查看Apache commons 的另一个 bzip2 实现。迁移不应该很复杂(替换 CBZip2OutputStream -> BZip2CompressorOutputStream 就可以了)。

    【讨论】:

    • 试过这个。但我的解决方案最终导致成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2014-12-09
    相关资源
    最近更新 更多