我必须解决一个接近解析像3 GB或更高版本的巨大文件的问题。好吧,该文件的结构如下:伪xml文件如:
<docFileNo_1>
<otherItems></otherItems>
<html>
<div=XXXpostag>
</html>
</docFileNo>
... others doc...
<docFileNo_N>
<otherItems></otherItems>
<html>
<div=XXXpostag>
</html>
</docFileNo>
.......
在最近的帖子中:“http://stackoverflow.com/questions/4355107/parsing-a-big-big-not-well-formed-file-with-java”,我遇到了一个有趣的解决方案问题..所以我想要实现我的应用程序解析器,如多线程:
所以..把我的注意力放在步骤1)和2)上,我认为将顺序模式与多线程方式分开:
所以我怀疑......
对于我的怀疑......第1点,我不知道如何真正解决它。对于第2点,我认为我可以实现类似解析文件的类的内部类的线程,因此我可以通过已完成的所有线程增加静态计数器。对于第3点,我认为这是类似的第2点,但我不知道如何等待我的申请....
有人可以建议解决我的疑惑吗? 谢谢:))
答案 0 :(得分:1)
如果你有一个体面,高效的解析器,它应该能够尽可能快地解析数据。我建议你看看确保是这种情况,你将能够使用一个线程(可能是一个单独的线程来进行阅读)
3 GB并不是那么大。您应该能够在一分钟内阅读/解析它。大部分时间都只是从磁盘上读取文件。成本很可能是您使用已解析的信息所做的,而且值得传递给一个或多个其他线程。
要在两个线程(一个用于读取,一个用于处理)之间链接数据,您可以使用Exchanger或PipedOutputStream / PipedInputStream。交换机效率更高,但是Piped流更容易与解析器集成。