問題:使用上面代碼進行讀取數據,一開始無紅色字體兩行代碼時,當文件超過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進行初始化。