[英]How to deflate a byte array using java.util.zip?
我有這段代碼可以壓縮浮點值,但是輸出的大小比原始的大。
Mi的目標是將壓縮數據(字節數組)保存在文件中,然后對數據進行充氣以獲得原始浮點值。
我究竟做錯了什么?
public void floatToArrayByte() throws IOException {
float f = 3574.34568f;
byte arayByte[] = ByteBuffer.allocate(4).putFloat(f).array();
System.out.println("Original values");
for (int i = 0; i < arayByte.length; i++) {
System.out.print(arayByte[i]);
System.out.print(" ");
}
System.out.println("");
arayByte = this.compress(arayByte);
System.out.println("Compress values");
for (int i = 0; i < arayByte.length; i++) {
System.out.print(arayByte[i]);
System.out.print(" ");
}
System.out.println("");
}
public byte[] compress(byte[] data) throws IOException {
Deflater deflater = new Deflater();
deflater.setInput(data);
deflater.setLevel(Deflater.DEFLATED);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
deflater.finish();
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
int count = deflater.deflate(buffer);
outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
System.out.println("Original size: " + data.length + " Bytes");
System.out.println("Compressed size: " + output.length + " Bytes");
return output;
}
這就是我得到的
原始值
69 95 101 -120
原始大小:4個字節
壓縮大小:12字節
壓縮值
120 -38 115 -115 79 -19 0 0 3 -121 1 -110
對於非常短的輸入(例如您的情況下只有4個字節),您將始終獲得比輸入更長的“壓縮”值,因為壓縮流包含一些標頭。
嘗試壓縮更多數據(例如10萬個浮點數)以查看差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.