java.util.zip.ZipException:无效的文字/长度代码

java.util.zip.ZipException:无效的文字/长度代码,java,base64,Java,Base64,我已经解压了base64字符串的3个文档(1.docx和2.pdf),我正在尝试将这些字符串转换回它们的文档。这是我正在尝试的代码。此代码适用于.docx字符串,但不适用于.pdf字符串 public static void main(String[] args) throws IOException, DataFormatException { String outputFilePath = "document.pdf"; File file = new File(output

我已经解压了base64字符串的3个文档(1.docx和2.pdf),我正在尝试将这些字符串转换回它们的文档。这是我正在尝试的代码。此代码适用于.docx字符串,但不适用于.pdf字符串

public static void main(String[] args) throws IOException, DataFormatException {
    String outputFilePath = "document.pdf";
    File file = new File(outputFilePath);
    FileOutputStream fos = new FileOutputStream(file);
    String str = FileUtils.readFileToString(new File(file_name_containing_compressed_base64_string), "utf-8");
    byte[] zipData = Base64.decodeBase64(str);
    GZIPInputStream zi = new GZIPInputStream(new ByteArrayInputStream(zipData));
    IOUtils.copy(zi, fos);

    fos.close();
    zi.close();

}
我在
IOUtils.copy(zi,fos)上遇到异常一个.pdf字符串的异常为

java.util.zip.ZipException: invalid literal/length code
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
at com.fileHandling.FileOutput.main(FileOutput.java:126)
第二个.pdf字符串的例外是

java.util.zip.ZipException: invalid distance too far back
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
at com.fileHandling.FileOutput.main(FileOutput.java:126)

请告诉我这些异常的原因,以及如何解决这些异常

您处理数据的路径是:

  • 包含解压的base64字符串的文件名

  • =>decodeBase64=>zipData(是否压缩?)

-=>gzip输入流:要解压缩已解压缩的文件吗?

  • 复制到PDF
gzip输入流用于解压缩传入的输入流。

1个简单的解决方案:我会删除解压缩,但与名称不一致:zipdata

2.一步一步:每一步都做一个程序:编码/解码,压缩/解压缩,每一步都检查,并放一些println/跟踪


关于这一点的其他一些帖子:

zipData是压缩的。因此,使用“gzip输入流”对其进行解压缩当名称不正确时:文件名包含已解压缩的base64字符串然后解决方案2:逐步执行。