21

Serializableオブジェクトをディスクに保存する場合、どのファイル拡張子が最適ですか?

FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
    fos = new FileOutputStream(filename);
    out = new ObjectOutputStream(fos);
    out.writeObject(mySerializableObject);
} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    IOUtils.closeQuietly(out);
}
4

1 に答える 1

39

「.ser」はファイルサフィックスの妥当な選択です-http ://www.file-extensions.org/ser-file-extension

ただし、他の一般的に使用されるアプリケーションのサフィックスと衝突しない限り、使用するサフィックスにはほとんど違いがないと主張することができます。

Javaシリアル化オブジェクトファイルは、クラスパスに関連するクラスがあるJavaアプリケーションによってのみ(通常の方法で)読み取ることができます。ワンサイズですべてに対応する「.ser」サフィックスは、これらのクラスが何であるか、およびアプリケーション起動フレームワークがそれらを見つける必要がある場所についての手がかりを提供しません。そのため、Windowsスタイルのファイルの関連付けを設定して、ダブルクリックでアプリケーションを起動することはできません。


「.ser」ファイルを表示または編集する方法はありますか?

可能性はありますが、非常に困難であり、特定の条件下でのみです。

ファイルの内容は、シリアル化されたクラスに大きく依存します。これで、そのクラスの名前、および(場合によっては)シリアル化されたフィールドの名前とタイプを判別できます。ただし、クラスがカスタムのシリアル化/外部化を使用する場合、表現はバイナリデータの不透明なブロブになり、ファイルにデコード方法に関する手がかりがありません。Java SEクラスライブラリの多くの重要なクラスが効率のためにカスタムシリアル化を使用しているため、不透明なblobの問題はかなり一般的です...そして多くのアプリケーションクラスも同様です。

他の可能なアプローチは、.serファイルに記載されているすべてのクラスの.classファイルを検索し、オブジェクトに逆シリアル化し、リフレクションを使用して逆シリアル化されたオブジェクトのフィールドにアクセスすることです。それらを微調整して再シリアル化することもできます。ただし、すべての.classファイルの適切なバージョンがない場合、これは初心者ではありません。

最後に、バイナリエディタを使用して「.ser」ファイルを編集することは技術的には可能ですが、危険です。シリアル化形式は、これをサポートするようには設計されていません。

于 2012-05-03T14:31:42.533 に答える