繁体   English   中英

Java FileWriting和Raspberry Pi

[英]Java FileWriting and Raspberry Pi

我一直在为Raspberry PI开发Java程序,但遇到了问题。

该程序从设备读取数据,然后使用DOM将其保存在XML文件中。 我的问题是,当我们将信息添加到XML时,写入更多信息变得越来越慢。 我们正在谈论的是,一旦它具有10个条目之类的微不足道的东西,它就会成为巨大的瓶颈,以至于最终写入XML所需的时间要比从设备读取数据的时间长。

我在想问题是它需要用每一次新的写入来重写整个文件。 因此,我阅读了整个XML,添加了我想要的条目并将其写回。 我需要一种只在文件上添加新条目而不读取所有数据的方法。

我寻找了一个允许这样做但找不到的XML API。

所以我的问题是:

  • 有人告诉我DOM非常慢,所以这是一个问题,因为我正在使用DOM? 还是这是Raspberry PI读取速度慢的结果。

  • 您是否可以推荐一个非常轻量的XML API,该API仅允许添加和读取XML文件的特定部分? 当说Stax流XML文件时,这是什么意思?

  • 我正在将所有内容重写为json(因为被告知它要快得多),但是这样做的时候我想知道我的问题是否不会持续,因为我不可避免地会读取整个文件并再次写入整个文件。

  • 将数据追加到文本文件的最轻巧的方法是什么? 数据将始终添加在文件的末尾,所以我想知道是否仅使用纯旧文本文件不是最佳解决方案?

如果我理解正确,那么您将在每次发生某些事件时尝试更新 XML文件。 也就是说,当事件发生时,您:

  • 将XML文件读入DOM。
  • 修改DOM的某些元素。
  • 将XML文件写入文件。

这没有发挥XML的优势,而使用适合随机访问写入的文件格式会更好。 研究JDBM2,甚至是像H2这样的轻量级SQL数据库。

如果确实需要一个XML文件,则可以考虑在程序开始时一次读取它,将DOM保留在内存中,按计划写入文件(如果已更改),并在单独的线程中进行更新。

如果采用这种方法,请使用synchronized方法来确保在文件写入期间不修改DOM。

我可以用树莓派证明JSon的速度。 即使读入整个文件并用JSon写出也比DOM快得多。

我的应用程序读取了超过500个JSon字符串,并在不到一秒钟的时间内写了差不多相同的数量。 如果您不需要更新数据,则只需打开一个带有“ ab”标签的文件即可添加到文件中,而不会覆盖现有数据。

事实证明,对于我正在做的事情而言,XML编写实际上足够快,并且正在减慢整个系统的速度并造成瓶颈,这是我正在写数据库,但是当没有互联网时,连接超时约为2分钟,因此线程将开始堆积,等待超时结束,这样它们便可以将数据写入XML文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM