たとえば、シリアライズ対象クラスに変数を追加したら、この値を変えなければいけないのでしょうか?
その通りです。既存の変数の型を変えたりした場合も同様です。
シリアライズは、オブジェクトをバイト列に変換(シリアライズする、直列化する)して、ファイルに保存しておいてからあとで読み出したり、ネットワーク経由でSerializableなオブジェクトをやりとりするときに使います。
バージョンに互換性のないオブジェクトを読み込んだ時には、java.io.InvalidClassExceptionが発生します。
バージョンが異なっても動作する場合もありますが、正常な動作は保障されないので、クラスのフィールド定義が変更されたらserialVersionUIDは変えた方が良いでしょう。互換性が無い場合のエラーメッセージも分かりやすくなります。
serialVersionUIDは自動生成できます。Eclipseなら警告のところで「クイック・フィックス」を出すと、serialVersionUIDの自動生成が選択できます。
また、JDKにはserialver(.exe)というコマンドがあります。
シリアライズクラスを変更した場合は、クライアントプログラムを再配布しないといけなくなりますので、慎重に設計したほうが良いですね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/08/20 01:25