2011-12-29 4 views
1

ファイルにデータを書き込んでいるアプリケーションを開発しています。バッテリーのプラグを差し込んでデータを書き込んでいる間に想定します。ファイルはどうなりますか?私たちがそれに書き込む前と同じように半分筆記(壊れた)、空、または同じになりますか?私の推測は、それが壊れてしまうことです。ファイルがオブジェクトのarraylistを格納していたときに電話機を再起動したときにファイルが破損していないかどうかを確認するにはどうすればよいですか? javaは破損したファイルの例外をスローするか、読み込まれたarraylistがnullか、それが未知のオブジェクトであると言うでしょうか?アンドロイドでバッテリーのデータをバックアップする方法は?

PS。おそらくデータファイルのMD5チェックサムを保持する別のファイルを作成しますか?ファイルのデータに最初に書き込むときは、まずチェックサムを生成し、次にデータファイルから読み込んだときにチェックサムを生成し、それを以前のものと比較します。それは私のデータが損なわれていないかどうかを示しますが、以前の状態(破損前の状態)にロールバックすることはできません。私は可能な限り軽量である方法を望んでいます。私はすでに、CPUをあまりに多く使用して、何千もの属性の変更ごとにストレージへの変更を読み書きしています。おそらく、データベースが良いアイデアでした。

答えて

3

私は、Javaが破損してシリアル化された配列に読み込みますどのように言うが、安全のためのは、エラー検出がないと仮定してみましょうすることはできません。その場合

、あなたは、2つの簡単なオプションがあります:あなたはそれをシリアル化する前に、

  • ストアあなたのデータ構造内のデータのチェックサムを。
  • 最終的なシリアライズされたファイルのチェックサムを計算します。

いずれの場合も同じように動作しますが、ディスクに何かを書き込む前にチェックサムを計算するので、最初のオプションが少し速くなる可能性があります(ファイルI/Oの余分なラウンドを回避します)。

前述のとおり、MD5はこれで問題ありません。 (基本的なCRCでも大丈夫でしょう - このために暗号文ハッシュは必要ありません。)

以前のバージョンにロールバックできるようにしたい場合は、各バージョンを別々のものとして保存します最も最近のものへのポインタを持っています。 (書き込み操作の最後のステップとしてポインタを更新すると、アプリケーションに入力されている破損データに対する保護レベルも強化されますが、このポインタが壊れているように準備する必要があります。このコミットステップは、本質的であるので、あなたは「最後のバージョンを使用する」。)

破損としてポインタを解釈することができそして、はい、この時点で、あなただけのAndroidに組み込まれているSQLiteの機能を使用する場合があります。 :)