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

时间:2015-12-27 07:24:39

标签: java base64

我已经解压缩了3个文件的base64字符串(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)

请告诉我这些例外的原因以及如何解决这些例外

1 个答案:

答案 0 :(得分:1)

您处理数据的路径是:

  • file_name_containing_decompressed_base64_string

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

- => GZIPInputStream:你想解压缩已经解压缩的吗?

  • 复制到PDF

GZIPInputStream将用于解压缩传入的InputStream。

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

2循序渐进:每一步都要执行一个程序:编码/解码,压缩/解压缩,并在每一步检查,并放一些println / trace

其他一些帖子:Java: How do I convert InputStream to GZIPInputStream?