Android 读取文件数据被截断

问题:使用上面代码进行读取数据,一开始无红色字体两行代码时,当文件超过1024B的时候,发现读取的数据并不是完整的文件数据信息,而是会多出一些数据。代码如下:

byte[] buffer = new byte[1024];
FileInputStream fis = null;
try {
     fis = new FileInputStream(dir+fileName);
     while(fis.read(buffer,0,buffer.length) != -1){ 
           showInfo(buffer);
           buffer = null;
           buffer = new byte[1024];
      }
} catch (IOException e) {
e.printStackTrace();
}

定位:通过比对数据发现多出的数据恰好是上一次读取的数据末尾部分,怀疑是再次调用 fis.read(buffer,0,buffer.length)接口时,buffer

          并不会自动清除,数据还是保存着上次的数据,从而导致最后获取到的数据中有上一次读取的数据。

验证:添加红色两行代码进行初始化buffer,读取数据正常。通过跟踪read源码未找到对数据初始化部分。

总结:在涉及到需要循环读取某数据时,不管接口的处理如何,最好都要对buffer进行初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章