2017-04-22 58 views
0

我有這個代碼來壓縮浮點值,但輸出的大小比原來的大。如何使用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

+0

這是你打算壓縮四個項目?很有可能你不會節省太多空間。即使有400個浮標,結果也可能是洗滌,特別是如果浮標是隨機的。 – dasblinkenlight

+0

我要壓縮一個包含數千條記錄的氣候數據集,並且所有的值都是浮點值。 –

+0

你能幫我嗎? –

回答

0

對於非常短的輸入(比如你的情況只有4個字節),你總是會得到比輸入更長的「壓縮」值,因爲壓縮流包含一些標題。

嘗試壓縮更多數據(如100萬浮點數)以查看差異。

相關問題