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. javascript - vue组件通过eventBus通信时,报错a.$on is not a function2. python3.x - python3.5.2安装时make报错求助3. html - vue项目中用到了elementUI问题4. javascript - 在使用 vue.js element ui的时候 怎么样保留table翻页后check的值?5. mysql_replication - mysql读写分离时如果单台写库也无法满足性能怎么解决6. ionic 项目 ionic build android -release 打包时报错7. linux - ubuntu 命令行中文 显示菱形,期望通过引入字体解决而不是zhcon这种方式8. angular.js - 如何控制ngrepeat输出的个数9. mac里的docker如何命令行开启呢?10. python - 如何用pandas处理分钟数据变成小时线?

网公网安备