我使用Java BufferedReader對象逐行讀取GZIPInputStream,該GZIPInputStream指向包含1,000行ASCII文本的有效GZIP壓縮文件,採用典型的CSV格式。代碼如下所示:GZIPInputStream BufferedReader中的文件結束序列
BufferedReader buffer = new BufferedReader(new InputStreamReader(
new GZIPInputStream(new FileInputStream(file))));
其中file是指向歸檔的實際文件對象。
我經歷了所有的文件,通過調用
int count = 0;
String line = null;
while ((line = reader.readLine()) != null)
{
count++;
}
讀取和讀卡器進入了預期的文件,但最終它繞過線#1000和讀取一個多行後(即數= 1001結束循環)。
調用line.length()在最後一行報告了大量的(4000 +)字符,所有這些都是不可打印的(Character.getNumericValue()返回-1)。
其實,如果我這樣做line.getBytes()生成的byte []數組有相同數量的NULL字符('\ 0')。
這看起來像是BufferedReader中的錯誤嗎?
在任何情況下,任何人都可以請建議一種解決方法來繞過此行爲?
編輯:更奇怪的行爲:第一行讀取的前綴是文件名,幾個NULL字符('\ 0')和東西線用戶名和組名,然後實際文本如下!
編輯:我創建了一個非常簡單的測試類,它重現了我上面描述的效果,至少在我的平臺上。
編輯:顯然是虛驚一場,我得到的文件不是普通的GZIP,但塗了焦油的GZIP,所以這解釋了它,不需要進一步測試。感謝大家!
調試方式:使用外部'gzip'提取文件,並省略'GZIPInputStream' - 並查看提取的文件。這可能是你的gzip文件有問題,或者InputStreamReader或BufferedReader有錯誤。或者GzipInputStream。 –
您正在談論一個簡單的gzip文件,但您的代碼引用了一個'tar.gz'文件。爲什麼?你知道tar + gz文件和gzip不一樣嗎? – leonbloy
既然你有問題的答案,接受其中一個答案,投票答覆誰幫助你等是一個好主意。 – woliveirajr