java使用Gzip压缩Json字符串

作者: ʘᴗʘ发布时间:2023-02-28 18:36 浏览量:586 点赞:434 售价:0

介绍

日常开发中,JSON经常会被用到。便于阅读的JSON格式肯定是格式化过后,携带大量换行、空格等等无效字符的样式。但这样的格式在一些流量敏感、耗时敏感的业务中需要压缩。

本文介绍如何使用java自带的Gzip压缩算法,压缩JSON字符串。

代码

直接上代码:

package com.szslxn.ems.device.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/**
 * @author longge93
 */
public class JsonCompressor {
    public static byte[] compress(String json) throws IOException {
        byte[] input = json.getBytes(StandardCharsets.UTF_8);
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//             GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream) {{
//                 设置压缩比
//                 def.setLevel(Deflater.BEST_COMPRESSION);
//             }}
             GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream)
        ) {

            gzipOutputStream.write(input);
            gzipOutputStream.finish();
            return outputStream.toByteArray();
        }
    }

    public static String decompress(byte[] compressed) throws IOException {
        try (ByteArrayInputStream inputStream = new ByteArrayInputStream(compressed);
             GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream);
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = gzipInputStream.read(buffer, 0, buffer.length)) != -1) {
                outputStream.write(buffer, 0, length);
            }
            return outputStream.toString(StandardCharsets.UTF_8);
        }
    }


}

代码介绍:

  • 合理的使用try with resources关闭了各种输入输出流。网上很多其他版本的,输入输出流没有正确关闭,长时间运行会出错。
  • 代码中备注的部分,是可以设置Gzip的压缩级别的,通过调节这个设置,可以在压缩速度和压缩率之间,根据自己的业务需求寻求最佳配置。
  • 实测压缩JSON的效果很不错,可以减少50%-75%的体积。

版权声明:《java使用Gzip压缩Json字符串》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/articles/78

其它推荐:

user

ʘᴗʘ

77
文章数
52617
浏览量
41996
获赞数
67.80
总收入

本文目录