GZIPInputStream逐行读取

我有一个.gz格式的文件。 读取这个文件的java类是GZIPInputStream。 但是,这个类没有扩展java的BufferedReader类。 因此,我无法逐行读取文件。 我需要这样的东西

reader = new MyGZInputStream( some constructor of GZInputStream) reader.readLine()... 

我虽然创build我的类扩展了Java的Reader或BufferedReader类,并使用GZIPInputStream作为其variables之一。

 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Reader; import java.util.zip.GZIPInputStream; public class MyGZFilReader extends Reader { private GZIPInputStream gzipInputStream = null; char[] buf = new char[1024]; @Override public void close() throws IOException { gzipInputStream.close(); } public MyGZFilReader(String filename) throws FileNotFoundException, IOException { gzipInputStream = new GZIPInputStream(new FileInputStream(filename)); } @Override public int read(char[] cbuf, int off, int len) throws IOException { // TODO Auto-generated method stub return gzipInputStream.read((byte[])buf, off, len); } } 

但是,这在我使用时不起作用

 BufferedReader in = new BufferedReader( new MyGZFilReader("F:/gawiki-20090614-stub-meta-history.xml.gz")); System.out.println(in.readLine()); 

有人可以build议如何进行..

装饰器的基本设置是这样的:

 InputStream fileStream = new FileInputStream(filename); InputStream gzipStream = new GZIPInputStream(fileStream); Reader decoder = new InputStreamReader(gzipStream, encoding); BufferedReader buffered = new BufferedReader(decoder); 

这个片段的关键问题是encoding的价值。 这是文件中文本的字符编码。 是“US-ASCII”,“UTF-8”,“SHIFT-JIS”,“ISO-8859-9”,…? 有数百种可能性,正确的select通常不能从文件本身确定。 它必须通过一些带外频道来指定。

例如,也许这是平台默认。 然而在networking环境中,这是非常脆弱的。 写入文件的机器可能位于邻近的隔间中,但具有不同的默认文件编码。

大多数networking协议使用标题或其他元数据来显式logging字符编码。

在这种情况下,从文件扩展名看来,内容是XML。 为此,XML在XML声明中包含“编码”属性。 而且,XML实际上应该用XMLparsing器处理,而不是文本。 逐行读取XML似乎是一个脆弱的特例。

没有明确地指定编码是针对第二条命令的。 在你的危险中使用默认编码!

 GZIPInputStream gzip = new GZIPInputStream(new FileInputStream("F:/gawiki-20090614-stub-meta-history.xml.gz")); BufferedReader br = new BufferedReader(new InputStreamReader(gzip)); br.readLine(); 
 BufferedReader in = new BufferedReader(new InputStreamReader( new GZIPInputStream(new FileInputStream("F:/gawiki-20090614-stub-meta-history.xml.gz")))); String content; while ((content = in.readLine()) != null) System.out.println(content); 

关于什么:

 GZIPInputStream zipReader = new GZIPInputStream(); InputStreamReader streamReader = new InputStreamReader(zipReader); BufferedReader bufferedReader = new BufferedReader(streamReader);