You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何还原经GZIP压缩写入的字符串?附Java压缩代码

Java GZIP压缩内容还原为原字符串的实现

要还原你压缩后的内容,需要对应使用GZIPInputStream读取压缩文件,再通过字符流解码为原字符串,示例代码如下:

FileInputStream input = new FileInputStream(outPutFilePath.toFile());
try {
    Reader reader = new InputStreamReader(new GZIPInputStream(input), "UTF-8");
    try {
        StringBuilder sb = new StringBuilder();
        char[] buffer = new char[1024];
        int len;
        while ((len = reader.read(buffer)) != -1) {
            sb.append(buffer, 0, len);
        }
        String originalString = sb.toString();
        // 此处获取到还原后的原字符串
    } finally {
        reader.close();
    }
} finally {
    input.close();
}

更简洁的try-with-resources写法(Java 7及以上版本支持)

try (FileInputStream input = new FileInputStream(outPutFilePath.toFile());
     GZIPInputStream gzipIn = new GZIPInputStream(input);
     InputStreamReader reader = new InputStreamReader(gzipIn, StandardCharsets.UTF_8)) {

    StringBuilder sb = new StringBuilder();
    char[] buffer = new char[1024];
    int len;
    while ((len = reader.read(buffer)) != -1) {
        sb.append(buffer, 0, len);
    }
    String originalString = sb.toString();
    // 使用还原后的原字符串
} catch (IOException e) {
    e.printStackTrace();
}

原压缩代码的潜在问题提示

你当前的压缩代码中writer.write(String.valueOf(stringByteArray))存在错误:如果stringByteArray是原字符串的UTF-8字节数组,String.valueOf(byte[])会返回类似[B@xxxx的数组标识字符串,而非原字符串内容。正确写法应为:

// 假设stringByteArray是原字符串的UTF-8字节数组
writer.write(new String(stringByteArray, StandardCharsets.UTF_8));
// 若直接持有原字符串对象,可直接写入
// writer.write(originalString);

内容的提问来源于stack exchange,提问作者Navigator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:35:35