我正在尝试使用Java
DeflaterOutputStream
和
InflaterOutputStream
类来压缩字节数组,但这两个类似乎都不能正常工作。我想我是在错误地执行它们。
public static byte[] compress(byte[] in) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DeflaterOutputStream defl = new DeflaterOutputStream(out);
defl.write(in);
defl.flush();
defl.close();
return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
System.exit(150);
return null;
}
}
public static byte[] decompress(byte[] in) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InflaterOutputStream infl = new InflaterOutputStream(out);
infl.write(in);
infl.flush();
infl.close();
return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
System.exit(150);
return null;
}
}
下面是我用来压缩和解压缩字节数组的两种方法。我在网上看到的大多数实现都使用固定大小的缓冲区数组作为解压部分,但如果可能的话,我更愿意避免这种情况,因为如果我想要任何重要的压缩,我需要使缓冲区数组的大小为1。
如果有人能向我解释我做错了什么,我会感激的。另外,为了解释为什么我知道这些方法不能正常工作:它输出的“压缩”字节数组总是比未压缩的字节数组大,不管我试图提供的字节数组大小如何。