gpt4 book ai didi

java - GZIPInputStream 逐行读取

转载 作者:IT老高 更新时间:2023-10-28 11:47:51 29 4
gpt4 key购买 nike

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

例如,可能是平台默认设置。然而,在网络环境中,这是极其脆弱的。写入文件的机器可能位于相邻的隔间中,但具有不同的默认文件编码。

大多数网络协议(protocol)都使用 header 或其他元数据来明确注明字符编码。

在这种情况下,从文件扩展名来看,内容是 XML。为此,XML 在 XML 声明中包含“编码”属性。此外,XML 确实应该使用 XML 解析器进行处理,而不是作为文本处理。逐行读取 XML 似乎是一种脆弱的特殊情况。

未能明确指定编码是against the second commandment. 使用默认编码后果自负!

关于java - GZIPInputStream 逐行读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080381/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com