Android 讀取文件數據

 
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();
}
 

問題:使用上面代碼進行讀取數據,一開始無紅色字體兩行代碼時,當文件超過1024B的時候,發現讀取的數據並不是完整的文件數據信息,

          而是會多出一些數據。

定位:通過比對數據發現多出的數據恰好是上一次讀取的數據末尾部分,懷疑是再次調用 fis.read(buffer,0,buffer.length)接口時,buffer

          並不會自動清除,數據還是保存着上次的數據,從而導致最後獲取到的數據中有上一次讀取的數據。

驗證:添加紅色兩行代碼進行初始化buffer,讀取數據正常。通過跟蹤read源碼未找到對數據初始化部分。

總結:在涉及到需要循環讀取某數據時,不管接口的處理如何,最好都要對buffer進行初始化。

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