GZIPOutputStream JSON压缩

一、背景

小王瞥了一眼历史记录表,不禁惊呼:“这表怎么这么大?”同事们闻声纷纷围拢过来查看。仔细一瞧,发现这个表的大小竟然超过了3G。主管随即指示小王打开相应的表数据检查,发现其中存储了用户的权限信息,这些权限数据被转换成了JSON字符串并直接入库。众人面面相觑,小王更是感到困惑,问道:“这该如何是好?”

大林子思索片刻,建议道:“或许我们可以尝试对JSON进行压缩。”小王疑惑地问:“那能减少多少空间呢?”大林子估算道:“应该能够降低三分之二左右。”小王半信半疑,毕竟都是字符串,他觉得差别不会如此之大。为了证明自己的观点,大林子立刻编写了一个示例,并展示了一番压缩效果,让在场的所有人都感到惊讶。

二、大林子的例子

public static void main(String[] args) throws IOException {
        // 原始的JSON字符串 内部数据不能展示,可以替换自己的JSON字符串,越大越明显
        String jsonString = "[{\"id\": \"11111\"}]";

        byte[] compressedData1 = jsonString.getBytes();
        System.out.println("Pre-compressed data Length: "+compressedData1.length);
        // 将JSON对象转换为字符串
        System.out.println("Original JSON String: "+jsonString);

        // 压缩JSON字符串
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream);
        gzipOutputStream.write(jsonString.getBytes("UTF-8"));
        gzipOutputStream.close();
        byte[] compressedData = byteArrayOutputStream.toByteArray();
        System.out.println("Compressed Data Length: "+compressedData.length);


        // 解压缩数据并还原为JSON字符串
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(compressedData);
        GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);
        ByteArrayOutputStream decompressedOutputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = gzipInputStream.read(buffer)) != -1) {
            decompressedOutputStream.write(buffer, 0, len);
        }
        gzipInputStream.close();
        String decompressedJsonString = decompressedOutputStream.toString("UTF-8");
        System.out.println("Decompressed JSON String: " + decompressedJsonString);
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值