私は、1 人のユーザーのためにいくつかのシンプルだが構造化されたデータ (>10K) を保持する必要がある小さなデスクトップ アプリケーションを持っています。オブジェクトをシリアル化するか、XML データ ファイルを作成するかについて、意見をいただきたいです。私は単純化のために物事をシリアライズし始めましたが、それは機能しますが、コミュニティにもフィードバックを求めたいと思いました. 見逃している可能性のある欠点や潜在的な問題はありますか?
6 に答える
XMLは、シリアル化のための多くの選択肢の1つです。Java Serializable、XML、JSON、protobuf、またはその他の好きなことを行うことができます。落とし穴は見当たりません。
XMLの利点の1つは、JAXBを使用してオブジェクトをマーシャリングおよびアンマーシャリングできることです。
Javaのシリアル化メカニズムを使用することの主な欠点の1つは、Javaクラスと緊密に結合することです。Javaクラスを変更した新しいバージョンのアプリケーションを作成した場合、たとえば、メンバー変数を追加または削除した場合、古いバージョンで書き込まれたファイルを読み取ることはできなくなります。このため、シリアル化は長期保存にはあまり適していません。
Javaがデータをシリアル化する形式は非標準形式です。つまり、Java以外のツールを使用してデータを処理するのは困難です。
最良のオプションは、ファイルベースのデータベースを使用することです。私が試したのは、純粋にJavaベースのHSQLDBです。
JDBCで使用でき、SQLを使用する特権があります。
データベースをインストールする必要はありません。1つのjarファイルを使用するだけで、データを使用して別のファイルを作成できます。
例:http ://www.hsqldb.org/doc/guide/apb.html
注:シリアル化は永続性のためではありません。どういうわけかクラスが変更された場合、逆シリアル化は非常に困難になり、データの損失と同じくらい良くなります。
3 番目の方法は、JSON を使用し、Jackson パーサーを使用して、Java オブジェクトへのシリアル化/シリアル化をすばやく解除することです。
ロードと保存のシステムを自分で実装するため、データの保存にはXMLファイルを使用することをお勧めします。オブジェクトの構造を変更すると(たとえば、使用されるデータの動作に影響を与えない加算や整数)、シリアル化によって保存された古いオブジェクトはすべて、クラスに適合しなくなるため、役に立たなくなります。ただし、自己設計のXML保存システムを使用すると、古い保存データからオブジェクトを作成できます。
トレードオフをよく理解しているようですね。シリアル化は簡単ですが、XML ほど拡張できません。これが学校のプロジェクトまたは自分で使用するアプリである場合、私は個人的にシリアル化を行います.
また、ユーザーが XML を読み取り/編集できることが適切かどうかも検討する必要があります。それを防ぐための措置を講じる必要があるかもしれません。
xStream を見る必要があります。いくつかのプロジェクトで使用しました。