今天遇到一个十分诡异的问题情况是这样的:
在Android应用开发中,我负责开发的naive模块需要在特定时刻向Java应用层通过JNI透传一个字符串,这个其实就是一个普通的XML文件,特点就是超大,大约有4000多bytes,在后期调试中发现一个问题:
通过native代码的日志和Android应用层原生Log API打印的log都出现的截断现象,就是说xml不完整,当时第一个怀疑的原因就是数据截断了,然后在底层把能接收到的数据包扩大了很多倍,发现还是没有什么用。然后就在底层发现日志缓冲buff有限制,就在底层跟android应用层都添加日志,发现xml的长度和数据包是一样的,也就是说没有被截断的。然后就怀疑Android应用层原生Log API也是有日志缓冲buff限制的,于是,就打印了xml的最后几行数据,这是之前被截断没有打印的,发现可以打印,那这证明,数据本身是没有问题的,问题出在日志缓冲大小限制上。
得到的教训就是,以后凡是遇到超大数据,首先不要全部打印,也不要完全相信log日志的打印,要合理分析数据的完整性!