java.util.zip.ZipException:无效的文字/长度代码
我已经解压了base64字符串的3个文档(1.docx和2.pdf),我正在尝试将这些字符串转换回它们的文档。这是我正在尝试的代码。此代码适用于.docx字符串,但不适用于.pdf字符串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
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:逐步执行。