qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题

简介: qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题

使用qqwry.dat进行IP地理位置查询时,遇到一个问题即在本地测试时查询纯真库时正常,没有任何问题,但是打包传到服务器上便出现了乱码问题。

1.首先排除服务器的字符集编码的影响

使用如下命令验证了本地和服务器的编码是一致的

[root@master ~]# echo $LANG
en_US.UTF-8

2.查看qqwry.dat发现该文件是二进制文件,文件自身不存在编码的问题

[root@master ~]# file -i qqwry.dat
qqwry.dat: application/octet-stream; charset=binary

3.从IP库中读取并encoding的时的时候会不会有问题?发现同样在本地都是显示正常,但是传到服务器上全都是乱码。

logger.info("utf-8"+new String(b, offset, len, "utf-8"));
logger.info("gbk"+new String(b, offset, len, "gbk"));
logger.info("gb2312"+new String(b, offset, len, "gb2312"));

4.公司前辈,指点迷津 让我把未编码前的信息打出来,我把byte[]数组里面的二进制数据打印出来

    public static String getString(byte[] b, int offset, int len, String encoding) {
        try {
            String bts="";
            for(int i=0;i<b.length;i++){
                bts = bts+String.valueOf(b[i]);
            }
            logger.info("bytes [] "+bts);
            return new String(b, offset, len, encoding);
        } catch (UnsupportedEncodingException e) {
            return new String(b, offset, len);
        }
    }

5. 问题出来了,同一个IP从IP库中获取的byte数组是不一样的!!!  

6. 为什么读取出来的信息是不一样的?使用md5sum查看一下文件的md5是否一致,发现本地的qqwry.dat的md5居然和服务器上的不一致!

[root@master target]# md5sum qqwry.dat
8ad56a81343333406a78cfc81ad44cb7  qqwry.dat
[root@master target]# md5sum qqwry.dat
3c1db0363910a08a4cc2bbd81e1b0e14  qqwry.dat

7.将本地qqwry.dat scp传到服务器上,是可以的。

8.打包之后的文件不行?直接scp传上去的是正确的?难道是打包的时候出错了吗?

再一次打包上传,发现不仅md5不一样而且文件大小差距也很大,

[root@master target]# md5sum qqwry.dat
8ad56a81343333406a78cfc81ad44cb7  qqwry.dat
[root@master target]# md5sum qqwry.dat
3c1db0363910a08a4cc2bbd81e1b0e14  qqwry.dat

9.我擦,仔细检查了一下自己maven项目qqwry.dat放到了resources目录下,看不出来什么问题。

查阅资料得知,是因为在maven打包时,对于二进制类型的文件,需要filter过滤掉不然文件会错乱掉!

修改pom.xml的配置内容,重新打包之后发现文件正常了,和源文件的大小是一样的了,上传之后重新测试也是ok了。

<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>
       </nonFilteredFileExtensions>
   </configuration>
</plugin>


10.查阅官网的解释http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html,非常明了!

总结:

maven打包时如果有用到二进制类型的资源文件,记得在pom.xml中将其过滤掉,不然编译打包完成之后产生的文件会和打包前的不一样。  


目录
相关文章
|
2月前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
218 3
|
2月前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
3月前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
150 1
|
3月前
|
Java 测试技术 Maven
maven 打包命令
maven 打包命令
42 6
|
3月前
|
Java Linux Maven
IDEA如何用maven打包(界面和命令两种方式)
【10月更文挑战第14天】本文介绍了两种Maven项目打包方法:命令行与IDEA界面。首先确保已安装Maven并配置环境变量,通过`mvn -v`检查安装。命令行打包需进入项目目录,执行`mvn package`,之后在`target`目录查看结果。IDEA打包则需配置Maven路径,打开Maven Projects窗口,双击Lifecycle下的`package`阶段,同样在`target`目录查找生成文件,并在Build窗口查看日志以排查问题。
1686 1
|
3月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
171 4
|
3月前
|
Java Maven
用graalvm将maven项目打包成可执行文件
本文介绍了如何使用GraalVM将Maven项目打包成可执行文件,包括引入依赖和插件、编写代码、执行打包命令以及运行查看结果的完整过程。
235 0
用graalvm将maven项目打包成可执行文件
|
3月前
|
Java Maven
maven打包出现没有主类的原因,详细分析并解决
本文分析了使用Maven打包Java应用时找不到或无法加载主类的问题,通常是由于未配置主类或打包时未包含依赖,并通过添加Maven插件解决了依赖问题,同时指出了JavaFX应用可能遇到的运行时组件缺失的错误。
222 0
maven打包出现没有主类的原因,详细分析并解决
|
3月前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
389 0
|
5月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行