我已经解压缩了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)
请告诉我这些例外的原因以及如何解决这些例外
答案 0 :(得分:1)
您处理数据的路径是:
file_name_containing_decompressed_base64_string
=> decodeBase64 => zipData(压缩与否?)
- => GZIPInputStream:你想解压缩已经解压缩的吗?
GZIPInputStream将用于解压缩传入的InputStream。
1个简单的解决方案:我会删除解压缩,但与名称不一致: zipdata 。
2循序渐进:每一步都要执行一个程序:编码/解码,压缩/解压缩,并在每一步检查,并放一些println / trace
其他一些帖子:Java: How do I convert InputStream to GZIPInputStream?