【发布时间】:2018-05-09 11:16:26
【问题描述】:
我正在尝试使用 Java 直接从 URL 动态解析维基词典的转储。 Wiki 转储以压缩 BZIP2 文件的形式分发,我使用以下方法尝试解析它们:
String fileURL = "https://dumps.wikimedia.org/cswiktionary/20171120/cswiktionary-20171120-pages-articles-multistream.xml.bz2";
URL bz2 = new URL(fileURL);
BufferedInputStream bis = new BufferedInputStream(bz2.openStream());
CompressorInputStream input = new CompressorStreamFactory().createCompressorInputStream(bis);
BufferedReader br2 = new BufferedReader(new InputStreamReader(input));
System.out.println(br2.lines().count());
但是,输出的行数只有 36,这只是整个文件的一小部分,因为它的大小超过了 20MB。尝试逐行打印流,实际上只打印了几行 XML:
String line = br2.readLine();
while(line != null) {
System.out.println(line);
line = br2.readLine();
}
我在这里缺少什么吗?我几乎从网上找到的其他代码块中逐行复制了我的实现,其他人声称这些代码有效。为什么没有读取整个流?提前致谢。
【问题讨论】:
标签: java stream inputstream bzip2 wikidata