Deflater使(加密)byte []更大

时间:2015-04-17 21:14:41

标签: java android compression

我有一个大约9mil字节的byte [],我想将它存储到一个文件中。我想使用Deflater来压缩数组,但似乎这个过程只会使数组(略微)更大。我的数据是不可压缩的吗?如果是这样,为什么?还有其他方法可以缩小阵列吗?

我的代码:

    ByteArrayOutputStream baos = null;
    Deflater dfl = new Deflater();
    dfl.setLevel(Deflater.BEST_COMPRESSION);
    dfl.setInput(data);
    dfl.finish();
    baos = new ByteArrayOutputStream();
    byte[] tmp = new byte[1024];
    try{
        while(!dfl.finished()){
            int size = dfl.deflate(tmp);
            baos.write(tmp, 0, size);
        }
    } catch (Exception ex){

    } finally {
        try{
            if(baos != null) baos.close();
        } catch(Exception ex){}
    }

    Log.d(TAG, data.length + " " + baos.toByteArray().length);
    return baos.toByteArray();

编辑:

我将图像从磁盘转换为字节数组。然后我加密了它。现在我想将(加密的)byte []存储在一个文件中,以便稍后我可以读取并解密它,从而重新创建图像。原始图像大约为0.6MB,加密文件大约为9MB。为了用户的缘故,我想避免这么大的差异..

1 个答案:

答案 0 :(得分:1)

加密数据应该像随机噪声一样运行。随机噪声是不可压缩的。 我建议先压缩,然后加密。

现在,如果图像采用压缩格式(例如jpeg),则进一步压缩它可能无济于事。