首页 > 解决方案 > 从字符串中提取 gz 值

问题描述

我有一个存储数据的键值存储。当我检索该值时,它是一个带有属性“compressed_value”的 JSON,这个值是一个字符串,我不知道如何解压缩或反序列化它。

我尝试了很多方法,其中一种尝试使用具有不同字符集的 .getBytes() 并使用 GZIPInputStream 将字符串转换为 byte[] 但我总是收到错误“java.util.zip.ZipException: Not in GZIP格式”。

值类似于:“H4sIAAAAAAAA/wtOzC3ISVUoSa0oUSjJSCxRyFRITswrUUhJLU4tykzMyaxK1VFISczLVQQAkIb0eioAAAA=”。当我将它粘贴到这样的网络中时它会毫无问题地反序列化该值。

示例代码

public class Main {
    public static void main(String[] args) throws IOException {
    String compressedValue = "H4sIAAAAAAAA/wtOzC3ISVUoSa0oUSjJSCxRyFRITswrUUhJLU4tykzMyaxK1VFISczLVQQAkIb0eioAAAA=";

        try {
            final int BUFFER_SIZE = 32;
            ByteArrayInputStream is = new ByteArrayInputStream(compressedValue.getBytes());
            GZIPInputStream gis = new GZIPInputStream(is);
            byte[] data = new byte[BUFFER_SIZE];
            int bytesRead;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((bytesRead = gis.read(data)) != -1) {
                baos.write(data, 0, bytesRead);
            }
            gis.close();
            is.close();
            System.out.println(baos.toString("UTF-8"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

标签: javajsoncompressiongzip

解决方案


推荐阅读