壓縮json的一些方式

有時候系統之間的交互須要傳遞報文,可是報文的量有時候是巨大的,會佔用很大的貸款,java

或者有時候是經過加密進行傳遞好比:RSA非對稱加密,若是這樣的話,解密方就會花費不少的時間進行解密。由於RSA加密安全性很高,可是其性能不是很好。算法

因此能夠在進行數據傳遞的時候先進行一遍的json壓縮,而後再通過RSA加解密就會快不少。json

而後此次才用的是:安全

Deflater & Inflater

Deflater 是同時使用了LZ77算法與哈夫曼編碼的一個無損數據壓縮算法。性能

咱們可使用 JDK自帶的提供的 Deflater 和 Inflater 類對 json 進行壓縮和解壓縮:編碼

// 壓縮
public static String zipString(String unzip) {
    Deflater deflater = new Deflater(9); // 0 ~ 9 壓縮等級 低到高
    deflater.setInput(unzip.getBytes());
    deflater.finish();

    final byte[] bytes = new byte[256];
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);

    while (!deflater.finished()) {
        int length = deflater.deflate(bytes);
        outputStream.write(bytes, 0, length);
    }

    deflater.end();
    return new sun.misc.BASE64Encoder().encodeBuffer(outputStream.toByteArray());
}

 

// 解壓縮
@Nullable
public static String unzipString(String zip) {
    byte[] decode = new sun.misc.BASE64Decoder().decodeBuffer(zip);

    Inflater inflater = new Inflater();
    inflater.setInput(decode);

    final byte[] bytes = new byte[256];
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(256);

    try {
        while (!inflater.finished()) {
            int length = inflater.inflate(bytes);
            outputStream.write(bytes, 0, length);
        }
    } catch (DataFormatException e) {
        e.printStackTrace();
        return null;
    } finally {
        inflater.end();
    }

    return outputStream.toString();
}

 上面的壓縮有個不足之處就是,壓縮之後的流文件含有換行符。壓縮率仍是至關的高的,本身試驗了一個50K左右的json報文,壓縮以後大概只有2.5K左右。加密

相關文章
相關標籤/搜索