Java解压缩字节数组 - 不正确的数据检查

时间:2015-12-18 10:58:32

标签: java arrays byte compression

我有一点问题:我解压缩字节数组,所有内容都可以使用以下代码,但有时使用某些数据会导致DataFormatException数据检查错误。有什么想法吗?

 private byte[] decompress(byte[] compressed) throws DecoderException {
    Inflater decompressor = new Inflater();
    decompressor.setInput(compressed);
    ByteArrayOutputStream outPutStream = new ByteArrayOutputStream(compressed.length);
    byte temp [] = new byte[8196];
    while (!decompressor.finished()) {

        try {
            int count = decompressor.inflate(temp);
            logger.info("count = " + count);
            outPutStream.write(temp, 0, count);
        }
        catch (DataFormatException e) {
            logger.info(e.getMessage());
            throw new DecoderException("Wrong format", e);
        }
    }
    try {
        outPutStream.close();
    } catch (IOException e) {
        throw new DecoderException("Cant close outPutStream ", e);
    }
    return outPutStream.toByteArray();
}

3 个答案:

答案 0 :(得分:1)

1有些警告:你们两边都使用相同的算法吗?

你使用字节吗? (不是字符串)

你的阵列有不错的尺寸?

2 我建议你逐步检查,捕获异常,检查大小,null和比较字节。

像这样:Using Java Deflater/Inflater with custom dictionary causes IllegalArgumentException

  • 接受您的输入

  • 压缩

  • 复制你的字节

  • 解压缩

  • 将输出与输入进行比较

3如果你找不到,请采取另一个有效的例子,并逐步修改

希望有所帮助

答案 1 :(得分:0)

尝试使用其他压缩级别或使用nowrap选项

答案 2 :(得分:0)

我发现了它为什么会发生 byte temp [] = new byte [8196]; 它太大了,它必须是解压缩数组的大小,因为它是早期的Base64编码,我怎么能在解压缩之前得到这个大小?