簡體   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