有接收一个项目,其中一个功能是导入备份,前人在录数据的时候不是用数据库,而是json字符串?!(黑人问号)
然后当一些不知名的问题出现时,gson().formJson()是会报异常的
然后这个功能又是这次更新的重中之重.
然后就好好探究
所以就有了下面的问题
ByteArrayOutputStream 会忽略一些字符串和特殊字符
很久之前就有反馈过这个问题.那时很认真的观察.
当时得出一个结论:
前人写的代码有问题,导致数据读取异常
然后就没管他了,但是过年回去要求一定要把这个问题解决
然后我为了方便,直接把有问题的要读取的TXT文件放到assetes去
然后直接读取
fun readAsstes(context: Context): String? {
var ips: InputStream? = null
var msg: String? = null
try {
ips = context.resources.assets.open("photoValue.txt")
val bytes = ByteArray(ips!!.available())
ips.read(bytes)
msg = String(bytes)
} catch (e: IOException) {
e.printStackTrace()
} finally {
try {
ips!!.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
return msg
}
然后在经过gson().formJson()转换.木有毛病啊!!
那么问题来了
为什么现在没有问题,之前有呢?
为了找到源头,我把他们的数据都罗列了一下
好感人.前人写的代码居然会自动省略他特意填上的 / !?(黑人问号)
然后我把他代码拿出来看了一下:
fun readSD(): String? {
var file = File(path)
var ips: FileInputStream? = null
var outputStream: ByteArrayOutputStream? = null
try {
ips = FileInputStream(file)
//读出来的数据首先放入缓冲区,满了之后再写到字符输出流中
var bytes = ByteArray(ips!!.available())
var len = ips!!.read(bytes);
//创建一个字节数组输出流
outputStream = ByteArrayOutputStream();
outputStream.write(bytes, 0, bytes.size);
//把字节输出流转String
return String(outputStream.toByteArray());
} catch (e: Exception) {
}
return null;
}
就是在inputStream之后ByteArrayOutputStream的操作
其实我真没看懂他为什么要这么做,但是如果今天没有一时偷懒直接放到assets的话,估计我的绩效又要降一降了.