zoukankan      html  css  js  c++  java
  • 压缩json的一些方式

    有时候系统之间的交互需要传递报文,但是报文的量有时候是巨大的,会占用很大的贷款,

    或者有时候是通过加密进行传递比如: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左右。

  • 相关阅读:
    [CF1469D] Ceil Divisions
    [CF632D] Longest Subsequence
    [CF1215E] Marbles
    [CF689D] Friends and Subsequences
    [CF707D] Persistent Bookcase
    [CF10D] LCIS
    [CF713C] Sonya and Problem Wihtout a Legend
    [CF1114E] Arithmetic Progression
    [CF1404B] Tree Tag
    [CF710E] Generate a String
  • 原文地址:https://www.cnblogs.com/baizhanshi/p/11425227.html
Copyright © 2011-2022 走看看