私はHDF5またはNetCDFの上に実装しているカスタムデータ格納形式を持っています。私のデータフォーマットは時折進化しますが、まれに "古い"ファイルを読むことができることが重要です。シリアライザクラスの複数のバージョンでJavaカスタムシリアル化を処理するには?
私はC++とMicrosoft COMを使用していましたが、Javaを好んでこれらのツールキットを放棄しました。私のCOM時代には、データフォーマットリーダーのCLSIDをよく知られている場所にデータファイルとして置くことができました。それで、ファイルがデフォルトのファイルリーダー実装よりも古い(またはそれより新しい)フォーマットであれば、それが自分のコンピュータにインストールされている場合、正しい実装をインスタンス化します。私がファイル形式をup-rev'dするたびに、私は同じ基本インターフェースで新しいreaderをリリースするでしょうが、新しいCLSIDです。
Javaでこれと同等の方法がありますか?
編集:ノート—私はちょうど逆シリアル化の上、適切なクラスファイルを検索する方法をしたい、データファイル自体にJavaオブジェクトの実装をシリアル化する必要はありません。これは、ファイル形式をアップリブするたびにパッケージ名を変更する必要があるかどうか、または各バージョンで同じクラス名(例:com.example.customreader)を使用できるかどうかはわかりませんが、問題のバージョンを区別するためのserialVersionUIDや注釈のようなマーカーが付いています。私はクラスパスに複数のバージョンのjarファイルを置くことができれば後者の方が好きです。
編集2:私のデータはObjectInputStream
とSerializable
とは何の関係もない方法で格納され、いくつかの利点がない限り、私はそうする予定はありません。私は自分自身で読み書きを扱いますが、HDF5/NetCDFの特徴/特性のために、ObjectInputStreamを扱うのと同じくらい単純ではありません。
私はそれについて考えました...質問に追加されたコメントを見てください。 –