2009-07-02 8 views
0

私はHDF5またはNetCDFの上に実装しているカスタムデータ格納形式を持っています。私のデータフォーマットは時折進化しますが、まれに "古い"ファイルを読むことができることが重要です。シリアライザクラスの複数のバージョンでJavaカスタムシリアル化を処理するには?

私はC++とMicrosoft COMを使用していましたが、Javaを好んでこれらのツールキットを放棄しました。私のCOM時代には、データフォーマットリーダーのCLSIDをよく知られている場所にデータファイルとして置くことができました。それで、ファイルがデフォルトのファイルリーダー実装よりも古い(またはそれより新しい)フォーマットであれば、それが自分のコンピュータにインストールされている場合、正しい実装をインスタンス化します。私がファイル形式をup-rev'dするたびに、私は同じ基本インターフェースで新しいreaderをリリースするでしょうが、新しいCLSIDです。

Javaでこれと同等の方法がありますか?

編集:ノート—私はちょうど逆シリアル化の上、適切なクラスファイルを検索する方法をしたい、データファイル自体にJavaオブジェクトの実装をシリアル化する必要はありません。これは、ファイル形式をアップリブするたびにパッケージ名を変更する必要があるかどうか、または各バージョンで同じクラス名(例:com.example.customreader)を使用できるかどうかはわかりませんが、問題のバージョンを区別するためのserialVersionUIDや注釈のようなマーカーが付いています。私はクラスパスに複数のバージョンのjarファイルを置くことができれば後者の方が好きです。

編集2:私のデータはObjectInputStreamSerializableとは何の関係もない方法で格納され、いくつかの利点がない限り、私はそうする予定はありません。私は自分自身で読み書きを扱いますが、HDF5/NetCDFの特徴/特性のために、ObjectInputStreamを扱うのと同じくらい単純ではありません。

答えて

1

私はCOMに精通していませんが、serialVersionUIDのドキュメントを見たいと思うかもしれません。これは、シリアル化が変更されるときに変更されるように設計されています。

+0

私はそれについて考えました...質問に追加されたコメントを見てください。 –

0

私はあなたがより多くのコントロールを持っているしたい場合は、適切なシリアライザクラスを返すために、リモート・メソッドを呼び出すことができますVersioning of Serializables Objectsセクション

を見てみなければならないと思います。

関連する問題