Java无法解压Python压缩并Base64编码的字符串问题求助
Java无法解压Python压缩的Base64编码内容
我在Java中尝试解压一段由Python压缩并经Base64编码的字符串,折腾了一整天还是没成功。这段内容在在线工具和Python环境里都能正常解码,我也查过不少Java和Python跨语言压缩解压的相关问题,但依旧没能解决。
初始实现代码
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Base64; import java.util.zip.DataFormatException; import java.util.zip.Deflater; import java.util.zip.Inflater; public class CompressionUtils { private static final int BUFFER_SIZE = 1024; public static byte[] decompress(final byte[] data) { final Inflater inflater = new Inflater(); inflater.setInput(data); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length); byte[] buffer = new byte[data.length]; try { while (!inflater.finished()) { final int count = inflater.inflate(buffer); outputStream.write(buffer, 0, count); } outputStream.close(); } catch (DataFormatException | IOException e) { e.printStackTrace(); log.error("ZlibCompression decompress exception: {}", e.getMessage()); } inflater.end(); return outputStream.toByteArray(); } public static void main(String[] args) throws IOException { decompress(Base64.getDecoder().decode(Files.readAllBytes(Path.of("zip.txt")))); } }
初始代码报错
java.util.zip.DataFormatException: incorrect header check at java.base/java.util.zip.Inflater.inflateBytesBytes(Native Method) at java.base/java.util.zip.Inflater.inflate(Inflater.java:378) at java.base/java.util.zip.Inflater.inflate(Inflater.java:464)
按建议修改后的代码
public static void main(String[] args) throws IOException { byte[] decoded = Base64.getDecoder().decode(Files.readAllBytes(Path.of("zip.txt"))); ByteArrayInputStream in = new ByteArrayInputStream(decoded); GZIPInputStream gzStream = new GZIPInputStream(in); decompress(gzStream.readAllBytes()); gzStream.close(); }
修改后仍出现的报错
java.util.zip.DataFormatException: incorrect header check at java.base/java.util.zip.Inflater.inflateBytesBytes(Native Method) at java.base/java.util.zip.Inflater.inflate(Inflater.java:378) at java.base/java.util.zip.Inflater.inflate(Inflater.java:464) at efrisapi/com.efrisapi.util.CompressionUtils.decompress(CompressionUtils.java:51) at efrisapi/com.efrisapi.util.CompressionUtils.main(CompressionUtils.java:67)
内容的提问来源于stack exchange,提问作者Aqeel Haider
相关产品推荐
相关产品推荐

