问题:使用上面代码进行读取数据,一开始无红色字体两行代码时,当文件超过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进行初始化。