ByteArrayOutputStream的坑!

1 篇文章 0 订阅
1 篇文章 0 订阅

有接收一个项目,其中一个功能是导入备份,前人在录数据的时候不是用数据库,而是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的话,估计我的绩效又要降一降了.



  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值