GZIPInputStream read()方法中的巨坑

問題現象:

在從.gz文件中按一定緩存大小讀取文件時,會莫名其妙地出現重複讀取讓此一讀過的數據:

例如,第一次:

abcdefghi

第二次讀取成了:

jkldefghi

原因:

百思不得其解,後來看網絡上有說法說read方法不一定將緩存填滿。

於是上述現象得到了解釋,即第二次其實只讀到了jkl這幾個字符,而後面的defghi又沒有被清除掉,於是出現了上述現象。

解決方法:

每次讀取後都記錄一下實際讀到的長度,然後根據實際長度轉成字符串。

int len = gZIPInputStream.read(b, 0, bufferSize)

String tempLine = new String(b, 0 , len);

轉載請註明出處:http://blog.csdn.net/gklifg/article/details/40398569

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