gpt4 book ai didi

java - 为什么我似乎无法从 URL 流读取整个压缩文件?

转载 作者:行者123 更新时间:2023-12-01 17:53:28 26 4
gpt4 key购买 nike

我正在尝试用 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();
}

我在这里缺少什么吗?我几乎从网上找到的其他代码块中逐行复制了我的实现,其他人声称这些代码已经工作。为什么没有读取整个流?提前致谢。

最佳答案

事实证明,我只是愚蠢。维基词典 BZIP2 文件明确是多流的(甚至在文件名中也这么说),因此,使用普通 Commons 压缩类只读取一个流。您需要一个多流读取器才能读取多流文件,从表面上看,您必须自己编写一个。我偶然发现了以下对我有用的实现:

https://chaosinmotion.blog/2011/07/29/and-another-curiosity-multi-stream-bzip2-files/

希望这对将来的人有帮助:)

关于java - 为什么我似乎无法从 URL 流读取整个压缩文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490231/

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