如何还原经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
相关产品推荐
相关产品推荐

