invalid stream header: EFBFBDEF 问题解决
程序员文章站
2022-07-06 11:53:39
我们项目使用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>
下一篇: 说的是实话啊