簡體   English   中英

如何使用java.util.zip壓縮字節數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM