Deflater 使(加密的)byte[] 变大
Deflater makes (encrypted) byte[] bigger
我有一个大约 900 万字节的 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..我想避免这么大的差异,为了用户着想..
加密数据应该表现得像随机噪声。随机噪声是不可压缩的。
建议先压缩再加密
现在,如果图像是压缩格式(例如 jpeg),进一步压缩可能没有帮助。
我有一个大约 900 万字节的 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..我想避免这么大的差异,为了用户着想..
加密数据应该表现得像随机噪声。随机噪声是不可压缩的。 建议先压缩再加密
现在,如果图像是压缩格式(例如 jpeg),进一步压缩可能没有帮助。