public class Contact implements Serializable {
private String name;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Serializable
インターフェイスはいつ実装する必要がありますか?オブジェクトまたはオブジェクトのグループを取得し、ディスクに配置するか、有線または無線のトランスポートメカニズムを介して送信し、後で別のコンピューターなどでプロセスを逆にすることができます。元のオブジェクトを復活させます。基本的なメカニズムは、オブジェクトを1次元のビットストリームにフラット化し、そのビットストリームを元のオブジェクトに戻すことです。
スタートレックのトランスポーターのように、複雑なものを取り込んで1と0のフラットシーケンスに変換し、1と0のシーケンス(別の場所、場合によっては別の場所で)を取得し、元の複雑な「何か。"
したがって、オブジェクトのコピーを保存する必要がある場合はSerializable
インターフェイスを実装し、同じシステム上またはネットワーク経由で実行される別のプロセスに送信します。
オブジェクトを保存または送信するため。
オブジェクトの保存と送信が簡単になります。セキュリティとは関係ありません。
クラスのインスタンスを一連のバイトに変換できるようにする場合、またはSerializable
オブジェクトがクラスのインスタンスを参照する可能性があると考えられる場合は、Serializable
インターフェイスを実装します。
Serializable
クラスは、それらのインスタンスを永続化したい場合、またはワイヤ経由で送信したい場合に役立ちます。
Serializable
クラスのインスタンスは簡単に送信できます。ただし、シリアル化にはセキュリティ上の影響があります。 Joshua BlochのEffective Javaを読んでください。
この質問への答えは、おそらく驚くべきことに、never、またはより現実的には、レガシーコードとの相互運用性。これは、Joshua Blochによる Effective Java、3rd Edition の推奨事項です。
作成する新しいシステムでJavaシリアル化を使用する理由はありません
OracleのチーフアーキテクトであるMark Reinholdが記録上にあります 現在のJavaシリアル化メカニズムを削除することが長期的な目標であると述べているため。
Javaは、言語の一部として、Serializable
インターフェイスを使用して、オプトインできるシリアル化スキームを提供します。ただし、このスキームには難治性の欠点がいくつかあり、Java言語設計者は失敗した実験として扱う必要があります。
代わりに、明示的に制御できるシリアル化スキームを使用してください。プロトコルバッファ、JSON、XML、または独自のカスタムスキームなど。