GZIPInputStream逐行读取

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

reader  = new MyGZInputStream( some constructor of GZInputStream) 

reader.readLine()...

尽管我创建了扩展java的Reader或BufferedReader类并使用GZIPInputStream作为其变量之一的类。

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

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

回答:

装饰器的基本设置如下:

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”等吗?有数百种可能性,通常无法从文件本身确定正确的选择。必须通过一些带外通道来指定。

例如,也许这是平台默认值。但是,在网络环境中,这非常脆弱。写入文件的计算机可能位于相邻的小隔间中,但是具有不同的默认文件编码。

大多数网络协议使用标头或其他元数据来显式记录字符编码。

在这种情况下,从文件扩展名看来,内容是XML。为此,XML在XML声明中包含“

encoding”属性。此外,应该真正使用XML解析器而不是文本来处理XML。逐行读取XML似乎是一种脆弱的特殊情况。

未能明确指定编码违反第二条诫命。 使用默认编码会带来麻烦!

以上是 GZIPInputStream逐行读取 的全部内容, 来源链接: utcz.com/qa/423681.html

回到顶部