我有很多 xml 文件。每个 xml 文件都包含太多行和标签。这里我必须解析它们并用 xml 的文件名写入 .txt 文件。这需要尽快完成。越快越好。
xml 文件示例:
<text>
<paragraph>
<line>
<character>g</character>
<character>o</character>
.....
</line>
<line>
<character>k</character>
.....
</line>
</paragraph>
</text>
<text>
<paragraph>
<line>
<character>c</character>
.....
</line>
</paragraph>
</text>
文本文件示例:
go..
k..
c..
如何尽可能快地使用 java 中的多线程解析多个 xml 文件并写入多个文本文件?
我应该从哪里开始解决问题?我用来解析的方法会影响速度吗?如果有影响,哪种方法比其他方法更快?
我没有多线程经验。我应该如何构建一个有效的多线程结构?
感谢任何帮助。提前致谢。
编辑
我需要一些帮助。我使用SAX进行解析。我对线程池、多线程、java8 特性做了一些研究。我尝试了一些代码块,但总时间没有变化。如何在我的代码中添加多线程结构或 java8 功能(Lambda 表达式、并行性等)?
最佳答案
这种情况下需要注意的事项。
- 在许多情况下,尝试使用多线程同时写入多个文件是完全没有意义的。所有这些通常都会使磁盘磁头过度使用。
- 在解析时写入磁盘也可能是一个瓶颈。您最好将 xml 解析到缓冲区中,然后一次将整个缓冲区写入磁盘。
- 解析器的速度不太可能显着影响整个过程的时间。您的系统几乎肯定会花费更多的时间来读取和写入而不是解析。
- 快速检查一些真实的测试数据将非常有值(value)。尝试准确估计您将无法影响的时间。
- 通过将几千个样本文件读入内存来确定大约的总读取时间,因为无论您如何并行处理该过程,仍然需要花费该时间。
- 以类似的方式估计大约总写入时间。
- 将两者相加,并将其与读取、解析和写入相同文件的总执行时间进行比较。这应该能让您清楚地了解通过并行性可以节省多少时间。
并行并不总是解决运行缓慢的进程的问题。只需使用适当的硬件,您通常就可以显着提高吞吐量。
关于java - java中使用多线程解析xml并写入txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47097337/