欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

invalid stream header: EFBFBDEF 问题解决

程序员文章站 2022-03-24 12:48:59
我们项目使用report 报表功能,然后在加载xxxx.jasper文件时候报的invalid stream header: EFBFBDEF 的错误 public JasperPrint fill(InputStream inputStream, Map param ......

我们项目使用report 报表功能,然后在加载xxxx.jasper文件时候报的invalid stream header: efbfbdef 的错误

public jasperprint fill(inputstream inputstream, map<string, object> parameters)throws jrexception{

 jasperreport jasperreport = (jasperreport) jrloader.loadobject(inputstream); //这里出错

 return fill(jasperreport, parameters);
 }

 

跟踪源码主要是下面出错,百思不得其解,网上说很多都是发现字符被改变了以至于objectoutputstream无法识别该字符数组所以抛出了java.io.streamcorruptedexception: invalid stream header: efbfbdef,可是我这个跟字符串没关系。inputstream读取的是二进制文件,怎么可能出现这个问题。

    objectinputstream in = new objectinputstream(inputstream);

偶然看到这篇文章才得以解决

 

主要是跟maven resource 标签有关系,maven 打包时候,已经把二进制文件给破坏了,导致失败

 

<resources>
<resource>
<targetpath>${project.build.directory}/classes</targetpath> <directory>src/main/resources</directory> <filtering>true</filtering> </resource>
</resources>

在maven 网站过滤的时候

警告:不要过滤包含图像等二进制内容的文件!这很可能会导致输出损坏。如果您同时拥有文本文件和二进制文件作为资源,则需要声明两个互斥的资源集。第一个资源集定义要过滤的文件,另一个资源集定义要保持不变的文件。

以下则没有问题


<resources> <resource> <targetpath>${project.build.directory}/classes</targetpath> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/*.jasper</exclude> <exclude>**/*.jrxml</exclude> </excludes> </resource> <resource> <targetpath>${project.build.directory}/classes</targetpath> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.jasper</include> <include>**/*.jrxml</include> </includes> </resource>
</resources>