【问题标题】:Can you pre-process an XML file in Java to make loading/further processing faster?您可以在 Java 中预处理 XML 文件以加快加载/进一步处理的速度吗?
【发布时间】:2018-10-16 22:22:20
【问题描述】:

我想知道是否可以改进我的应用程序中的字符串处理。 我创建了一个测试 XML [为 RSS,因为我是一个崇拜哥伦布的人] 6.7 MB 文件,我正在处理文本以通过 RegEx 适应行长:

String returnString=returnString+"Text      : " + 
 e.getChildText("description").
replaceAll("(?<=\\G.{70,81}(?=\\s))",
"\n           ")+" \n";

每个已处理的项目 [org.jdom2.Element] 大约需要 8-16 毫秒 [Intel i7 gen 7,笔记本电脑],所以在我让它咀嚼一个将近 7 MB 的文件之前,我并没有那么不高兴。

处理需要 65-75 秒。

我可以做一些预处理来加快这个过程吗,或者是这样吗?

完全欢迎其他语言/其他方法。 C除外。

编辑:我正在处理 org.jdom2.Element 中的字符串。

【问题讨论】:

  • 目前的瓶颈是什么?如果您不知道,您可能想学习使用分析器。 visualvm 中的那个是一个很好的起点。
  • 我没有看到瓶颈。我什至不知道是否有一个。我写了一个我认为很好的代码,但我不喜欢输出处理时间。对我来说似乎很长。我可能正在做一个“婆婆”。坦率地说,我发布了一个可能对某些人有用的代码[嗯,正则表达式可以],我想知道这些改进,因为我缺乏进一步的知识。从字面上看是学术性的,但对其他人有用。
  • 考虑使用更简单的正则表达式。
  • 嗯...请解释一下。把我当成白痴。谢谢。
  • 你想做什么?您是否尝试将文本换行为 70-81 个字符的行,换行行缩进 11 个空格,以便它们最多 92 个字符宽?

标签: java regex xml string


【解决方案1】:

如果您只进行一次更改,则不太可能。

如果您要进行多项更改,那么很有可能。

如果您正在运行多个正则表达式,那么您会不断地迭代、复制和修改字符串多次。

在某些时候,将 XML 解析一次(例如,在 DOM 中),在较高级别上对其进行迭代进行较小的更改,然后将 XML 重新渲染到字符串中会更便宜。交叉点的位置取决于字符串的整体大小、更改的数量、解析和渲染的成本等。因此,最好尝试做一些基准测试,看看哪个效果更好。

【讨论】:

  • 与编程一样,我说的是不断的编程更改。因此,我要求尽可能少的数字。
  • 当然,但是如果您可以利用它们提供的效率,那么从长远来看,设置昂贵的东西是值得的。因此,重要的是要了解“加快速度”的成本,看看它们最终是否值得您的用例。
猜你喜欢
  • 2011-01-29
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多