簡體   English   中英

如何備份android中的電池插件數據?

[英]How to backup data on battery plug off in android?

我正在開發一個將數據寫入文件的應用程序。 假設在寫入數據時,我們要斷開電池的連接。 該文件將如何處理? 它是寫的一半(損壞),為空還是與我們寫之前相同? 我的猜測是它將被損壞。 當文件存儲對象數組列表時,如何在重啟手機時檢查其是否損壞? java會拋出損壞的文件異常,還是說read arraylist為null還是未知對象?

PS。 也許創建另一個文件,該文件將保留數據文件的MD5校驗和? 每當我向文件數據寫入數據時,我都會生成其校驗和,然后從數據文件中讀取數據時,會生成一個校驗和並將其與前一個進行比較。 這將表明我的數據是否完整,但不允許我回滾到先前的狀態(預損壞的狀態)。 我想要一種盡可能輕量的方法,因為在數千個屬性集的每個屬性更改上讀取/寫入對存儲的更改,我已經過多地使用了CPU。 可能數據庫本來是個更好的主意。

我不能說Java將如何讀取損壞的序列化數組,但是為了安全起見,我們假設沒有錯誤檢測。

在這種情況下,您有兩個簡單的選擇:

  • 在序列化數據之前,將數據的校驗和存儲在數據結構中。
  • 計算最終序列化文件的校驗和。

兩種情況都將以相同的方式工作,盡管第一種方法可能會更快一些,因為在將任何內容寫入磁盤之前都計算了校驗和(因此避免了額外的文件I / O循環)。

如你所述, MD5對此沒問題。 (即使是基本的CRC也可能沒問題-您不需要加密哈希)。

如果您希望允許回滾到以前的版本,則只需將每個版本存儲為一個單獨的文件,然后使用指向最新版本的指針即可。 (如果將指針更新作為寫操作的最后一步,這還將提供更高級別的保護,以防止將損壞的數據輸入到您的應用程序中-盡管您還必須為指針的損壞做好准備。由於這實際上是一個提交步驟,因此您可以將損壞的指針解釋為“使用最新版本”。)

是的,此時您可能只想使用Android內置的SQLite功能。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM