有時候系統之間的交互需要傳遞報文,但是報文的量有時候是巨大的,會占用很大的貸款,
或者有時候是通過加密進行傳遞比如:RSA非對稱加密,如果這樣的話,解密方就會花費很多的時間進行解密。因為RSA加密安全性很高,但是其性能不是很好。
所以可以在進行數據傳遞的時候先進行一遍的json壓縮,然后再經過RSA加解密就會快很多。
然后這次才用的是:
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左右。
