java - java中使用多线程解析xml并写入txt文件

标签 java xml multithreading parsing

我有很多 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 表达式、并行性等)?

最佳答案

这种情况下需要注意的事项。

  1. 在许多情况下,尝试使用多线程同时写入多个文件是完全没有意义的。所有这些通常都会使磁盘磁头过度使用。
  2. 在解析时写入磁盘也可能是一个瓶颈。您最好将 xml 解析到缓冲区中,然后一次将整个缓冲区写入磁盘。
  3. 解析器的速度不太可能显着影响整个过程的时间。您的系统几乎肯定会花费更多的时间来读取和写入而不是解析。
  4. 快速检查一些真实的测试数据将非常有值(value)。尝试准确估计您将无法影响的时间。
    • 通过将几千个样本文件读入内存来确定大约的总读取时间,因为无论您如何并行处理该过程,仍然需要花费该时间。
    • 以类似的方式估计大约总写入时间
    • 将两者相加,并将其与读取、解析和写入相同文件的总执行时间进行比较。这应该能让您清楚地了解通过并行性可以节省多少时间。

并行并不总是解决运行缓慢的进程的问题。只需使用适当的硬件,您通常就可以显着提高吞吐量。

关于java - java中使用多线程解析xml并写入txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47097337/

相关文章:

c++ - 成员变量不同 "kinds"的区别

java - 等待后解锁如何发生

c# - 我们能否在 C# 应用程序中创建 300,000 个线程并在 PC 上运行它?

java - org.apache.axis2.AxisFault : org. apache.axis2.databinding.ADBException:TimelyRenewal 下出现意外的子元素

XML 文件似乎没有任何与之关联的样式信息警告,如何处理?

java - 字符串的简单时间解析

java - OXM:映射变量元素名称

python - __init__() 获得意外的关键字参数 'conne'

java - java中Runnable创建的限制

java - 如何调试 Java OutOfMemory 异常?