java - maven打包导致二进制文件大小被改变
问题描述
使用class.getClassLoader().getResourceAsStream()这种方法获取classpath下的文件流,读取出来的文件比写main方法读出来的文件大小更大。
问题已经解决。
本地main方法测试
使用tomcat做为容器运行同样代码时

相关代码:
synchronized (PhoneNumberGeo.class) {if (dataByteArray == null) { ByteArrayOutputStream byteData = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int readBytesLength; try { InputStream inputStream = PhoneNumberGeo.class.getClassLoader() .getResourceAsStream('phone.dat'); while ((readBytesLength = inputStream.read(buffer)) != -1) { byteData.write(buffer, 0, readBytesLength); } inputStream.close(); } catch (Exception e) { System.err.println('Can’t find phone.dat in classpath phone.dat'); e.printStackTrace(); throw new RuntimeException(e); } dataByteArray = byteData.toByteArray();} } } byteBuffer = ByteBuffer.wrap(dataByteArray); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); int dataVersion = byteBuffer.getInt(); indexAreaOffset = byteBuffer.getInt();
完整代码:开源代码github
问题解答
回答1:问题已经解决~!总结由于将一个二进制的文件放在classpath下并且使用了maven-resources-plugin这个插件来拷贝资源文件导致。
详细来说是应为maven-resources-plugin这个插件有一个选项
<filtering>true</filtering>
如果开启那么只要是classpath下要被拷贝的文件默认都会进行替换也就是说将会映射成properties之后就可以在xml的配置中使用,比如那个jdbc.properties。但是这一个操作对于二进制文件,例如png,gif,pdf等就不合适了。 我们需要将这些文件格式都排除掉。
<plugins> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.4.3</version><configuration> <encoding>UTF-8</encoding> <nonFilteredFileExtensions><nonFilteredFileExtension>dat</nonFilteredFileExtension><nonFilteredFileExtension>swf</nonFilteredFileExtension> </nonFilteredFileExtensions></configuration> </plugin>
思考过程:开始走了不少弯路,我以为是因为项目的引用jar包问题,结果查询了很久还是找不到原因。最后我把各个文件的md5求出来才发现在target目录下的文件和resources目录下的不一致,最终发现问题所在。
参考:Maven Binary filtering获取classpath下文件的其他方法
相关文章:
1. redis sentinel怎么跑守护进程以及日志记录位置的?2. django - Nginx uwsgi 进程问题3. javascript - sublime快键键问题4. 前端 - 这段代码一直生效不了,查半天因为 top: 0px; 分号后一个隐藏的东西,也不是占位符...删了就可以生效,这是什么情况。。5. javascript - 爱加密的HTML5应用加固服务是什么原理?6. 微信小程序支持跳转到外部链接网页吗7. javascript - 求助关于js正则问题8. 关于纯用css写导航鼠标移入事件的问题?9. 百度地图api - Android百度地图SDK,MapView上层按钮可见却不可触,怎么解决?10. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?

网公网安备