invalid stream header: EFBFBDEF 問題解決


我們項目使用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);

偶然看到這篇文章才得以解決https://stackoverflow.com/questions/24078820/java-io-streamcorruptedexception-invalid-stream-header-efbfbdef

 

主要是跟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>
 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM