java.util.zip.DataFormatException: incorrect header check 异常问题及解决方法

当Node.js使用DeflaterRaw压缩ZIP JSON字符串时不包含标头,导致Java的Inflater解压时抛出'incorrect header check'异常。解决方法是在Java端创建Inflater时设置nowrap为true,忽略标头进行解压。这样可以成功解压并输出原始字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 解压 Node.js DeflaterRaw 压缩的字符串 报无标头解决方案

前端 Node.js DeflaterRaw 压缩zipJSON字符串,是没有标头的!

所以使用Java inflater 去解压时会报,提示无标头异常! incorrect header check!

java.util.zip.DataFormatException: incorrect header check
	at java.util.zip.Inflater.inflateBytes(Native Method)
	at java.util.zip.Inflater.inflate(Inflater.java:259)
	at java.util.zip.Inflater.inflate(Inflater.java:280)
	at com.example.my_qr_smart.ExampleUnitTest.decompressStrToBytes(ExampleUnitTest.java:68)

此时我们要使用Java inflater 去解压字符串时需要将Inflater 的 nowrap 设置为 true 去忽略标头进行解压即可。

     public static String compressStrToBytes(byte[] str) throws IOException {
        byte[] outinput = new byte[0];

        Inflater decompresser = new Inflater(true); //设置为Ture
        decompresser.reset();
        decompresser.setInput(str);

        ByteArrayOutputStream out = new ByteArrayOutputStream(str.length);
        try {
            byte[] buf = new byte[1024];
            while (!decompresser.finished()) {
                int i = decompresser.inflate(buf);
                out.write(buf, 0, i);
            }
            outinput = out.toByteArray();
        } catch (Exception e) {
            outinput = str;
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        decompresser.end();
        return new String(outinput);
    }

更改后就可以正常解压输出。
在这里插入图片描述

### 关于 `java.util.zip.DataFormatException: invalid block type` 错误 当使用 Apache PDFBox 进行 PDF 文件处理时,如果遇到错误提示 `java.util.zip.DataFormatException: invalid block type`,这通常表明在解析压缩流的过程中出现了问题。具体来说,可能是由于以下原因之一: - 输入的 PDF 文件损坏或不完整[^1]。 - 使用的 PDFBox 版本存在已知缺陷。 - 部分特殊编码或加密方式未被当前版本支持。 #### 可能解决方案 以下是针对该问题的一些常见解决方法: 1. **验证输入文件** 确保所使用的 PDF 文件本身没有损坏。可以尝试打开并查看此文件是否能在其他 PDF 查看器中正常显示。如果文件无法正确加载,则可能需要重新获取原始文件。 2. **升级到最新版 PDFBox** 如果正在使用的 PDFBox 是旧版本(如 2.0.10),建议将其更新至最新的稳定版本。新版本修复了许多与数据格式异常相关的 bug,例如 `[PDFBOX-4227]` 中提到的距离参数过远的问题。 3. **调整内存配置** 增加 JVM 启动参数中的堆大小设置也可能有助于缓解某些情况下因资源不足引发的数据读取失败现象。例如,在启动应用程序时加入如下选项: ```bash -Xms512m -Xmx1g ``` 4. **捕获特定异常并记录日志** 编写代码时增加对潜在运行期异常的捕捉逻辑,并将详细的上下文信息保存下来以便后续分析。下面是一个简单的例子展示如何优雅地处理此类情况: ```java try { PDDocument document = PDDocument.load(new File("path/to/document.pdf")); // Further processing... } catch (IOException e) { System.err.println("Error occurred while loading the document."); e.printStackTrace(); } ``` 通过上述措施应该能够有效减少甚至完全消除由非法块类型引起的崩溃状况发生几率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值