2011-02-27 113 views
3

嗨,大家好, 測試我的tar.gz提取工具,我發現拋出的異常:java.io.EOFException的:ZLIB輸入流意外結束

 
java.io.EOFException: Unexpected end of ZLIB input stream 
    at java.util.zip.InflaterInputStream.fill(Unknown Source) 
    at java.util.zip.InflaterInputStream.read(Unknown Source) 
    at java.util.zip.GZIPInputStream.read(Unknown Source) 
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) 
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source) 
    at sun.nio.cs.StreamDecoder.read(Unknown Source) 
    at java.io.InputStreamReader.read(Unknown Source) 
    at java.io.BufferedReader.fill(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at it.uniroma2.informatica.specialistica.IO.ScanCompressedFileUtil.main(ScanCompressedFileUtil.java:60 

因此,在第60行的代碼是:

BufferedReader bufLe= reader.remove(); 
try { 
    while (bufLe.ready()){ 
    System.out.println(" "+bufLe.readLine()); 
    } 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

其中調用buffer.readLine(),引發異常。當我打開tar.gz時,我保留了所有單個文件的流,像BuffReader然後我把它們放到一個linkedList中,然後我關閉打開的文件tar.gz的緩衝區。 但是,當我彈出鏈表中的元素,然後嘗試逐行閱讀。我有執行..

SOmeOne有一個IDEA,爲什麼我有異常?當我遍歷tar.gz中的文件時,也許我錯誤的somthin? 這樣做我的代碼:

TarInputStream is = new TarInputStream(gzipInputStream); 

TarEntry entryx = null; 

try { 
    while((entryx = is.getNextEntry()) != null) { 
    InputStream tmpInx = new StreamingTarEntry(is, entryx.getSize()); 
    // questo viene invocato perchè il file da lettere è un file txt 
    manageTxtinsideTAR(tmpInx , buffer); 
    // I add the stream to a linked list 

類STREAMINGTARENTRY,擴展FilterInputStream的,所以這只是包裹流。

+1

我不知道這是關係到你的問題,但你不應該使用BufferedReader就緒的方法就像這樣。閱讀它的API文檔。要從BufferedReader逐行讀取所有內容,請調用readLine,直到它返回null。 –

+0

不,我很抱歉。這個問題與使用.ready()無關。因爲已經實施了兩種類型的應用程序。我的第一個應用程序一切正常。但是,如果我想要所有單個文件像BuffeREader,然後我檢索他們中的一個,我有例外。 – Bomberlatinos9

回答