您的位置:首页 > 其它

读写文件出现偶尔或者少部分乱码的情况

2016-07-24 14:18 489 查看
新项目刚开始不到一个月,就接到一个用户的反馈,说是APP本地上传到后台的数据有中文乱码的情况,大概十几条数据出现一次两次。

凭直觉,这不可能是编码格式问题,不然就应该是大面积乱码了,看了源代码,也确实不是:从outputstream到inputstream,再到最后的httppost都是按照utf-8来编码的,大家开始讨论是不是后台数据编码的问题。然后开始查后台数据库,有乱码,但是编码也没有问题,问题陷入了僵局。

由于APP的sdk包是我这边提供的,领导自然把这个问题压给了我,没办法,我开始一步步的打印log,发现乱码确实出现在APP端,并且就在读取本地文件的时候发生的,但是很诡异,不是每次读取都有乱码,概率跟投诉的问题差不多,到这里问题也算是基本定位了,当然,随之而来压力也都压在我这边。但是测试了N多遍还是没找到真正的原因,随着log打印的越来越多,发现有个规律,就是文件内容少的时候基本没有乱码的情况,随着文件越来越多,乱码的概率就大了。

然后开始分析了整个数据上传逻辑:先以jsonarray格式的数据存到本地指定文件,下次再有数据就先读取这个文件,得到一个jsonarray,再把新数据一jsonobject的格式put进去,再写入文件,然后下次有新数据也是这个流程执行下去。以前没遇到过这种情况,分析了半天没头绪,请教同事。

还是有高手,有个同事说有没有可能是这么个情况导致的:就是随着本地文件数据量增大,读取和写入越来越耗时,前一次的写入还没有完成,后面的读取已经开始了。我一想有道理,起码很符合这种规律。然后就开始找相应的解决方法。

最后想到两种:

1、写入数据的时候不再读取文件,而是直接写入,相当于数据累加;

2、每次写入数据就重新创建一个文件,这个文件只存储这次的数据,下次再创建新文件

我先试的是第二种方法,多次试验后证明确实没有了乱码的情况,考虑到这两种方法对APP性能影响都差不多,上传成功后文件都会删除,再加上上面催的紧,就没有试验第一种方法。

问题虽然得到了解决,但是验证过程中产生了两个疑问:

1、在试验新方法之前,我用log分别打印了读取和写入文件方法的进出时间,发现并没有时间重合的情况,也就是说从打印的时间上看两个动作是没有同时进行的;

2、读取和写入同时进行了,怎么就会造成乱码的情况,原理是什么?

感觉还没找到根本的原因,只是选择的方法恰好解决这个问题。

以上的操作的IDE是eclipse。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: