GZIPOutputStream JSON压缩

发布于:2024-05-01 ⋅ 阅读:(25) ⋅ 点赞:(0)

一、背景

小王瞥了一眼历史记录表,不禁惊呼:“这表怎么这么大?”同事们闻声纷纷围拢过来查看。仔细一瞧,发现这个表的大小竟然超过了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);
    }


网站公告

今日签到

点亮在社区的每一天
去签到