【Java SE】Serializableシーケンス化

2824 ワード

以下を参照してください.https://blog.csdn.net/X8i0Bev/article/details/90168188
Serializableインタフェースは、中に何もないインタフェースです.ソースコードはpublic interface Serializable{}です.つまり、何もありません.
一般的に、エンティティクラスを定義するときにSerializableインタフェースを継承します.
質問:Serializableインタフェースとは何ですか?オブジェクトをシーケンス化するインタフェースです.クラスはSerializableインタフェースを実装してこそ、オブジェクトをシーケンス化できます.
質問:シーケンス化とは?シーケンス化は、オブジェクトのステータスを保持または転送可能なフォーマットに変換するプロセスです.シーケンス化に対して逆シーケンス化は、ストリームをオブジェクトに変換します.この2つのプロセスを組み合わせることで、データの格納と転送を簡単に行うことができます.
質問:なぜオブジェクトをシーケンス化するのですか?オブジェクトをバイトシーケンスに変換するプロセスをオブジェクトのシーケンス化と呼ぶ.バイトシーケンスをオブジェクトに復元するプロセスをオブジェクトの逆シーケンス化と呼ぶ.
質問:シーケンス化はどのような場合に必要ですか?
1.メモリ内のオブジェクトをハードディスクに書き込みたい場合.2.ネットワーク上でオブジェクトをソケットで転送したい場合.3.RMIでオブジェクトを呼び出したい場合(RMIは、要約するとリモート呼び出しオブジェクトであり、あるjvm上で別のjvmのオブジェクトを呼び出す).
オブジェクトの状態情報をネットワークを介して伝送する必要がある場合、または将来使用するためにオブジェクトの状態情報を永続化する必要がある場合、オブジェクトをシーケンス化する必要があります.なぜSerializableを継承するのか.これは、次回使用するときにコピーをすばやく再構築できるように、ストレージ・オブジェクトをストレージ・メディアに格納します.開発中、エンティティはシーケンス化されていませんが、mysql、Oracleデータベースにデータを保存できるのはなぜシーケンス化しなければ保存できないのでしょうか.1つのインタフェースには何もありません.識別インタフェースとして理解できます.
例えば、授業中にある学生が問題にぶつかったので、手を挙げて先生に教えてもらいました.その時、先生は彼に答えてもらいました.では、この学生の挙手は実は標識で、自分では問題を解決できないので、先生に解決してもらいます.Javaの中のこのSerializableインタフェースは実はJVMに见せたので、JVMに知らせて、私はこのクラスをシーケンス化しないで、あなた:JVMは私にシーケンス化を手伝ってくれればいいです.
Serializableインタフェースは、Javaがインスタンスオブジェクトを効率的にオフサイトで共有するためのメカニズムを提供し、このインタフェースを実現すればよい.
シーケンス化はどのような場合に使用されますか?
  • 質問:クラスimplements Serializableの後、なぜコードに64ビットのserialVersionUIDを宣言する必要があるのですか?

  • たとえば、エンティティクラスにはprivate static final long serialVersionUID = 3450342483181838030L;という文があります.
    Javaクラスのシーケンス化の主な目的は、次のとおりです.
    1.オブジェクトのバイトシーケンスをハードディスクに永続的に保存し、通常は1つのファイルに保存する.2.ネットワーク上でオブジェクトのバイトシーケンスを転送します.
    Javaクラスimplements Serializableの後、パラメータserialVersionUIDの文を追加する必要があります.serialVersionUIDは、Javaのシーケンス化メカニズムが実行時にクラスのserialVersionUIDを判断することによってバージョンの一貫性を検証するため、非常に重要なフィールドです.逆シーケンス化を行う場合、JVMは、送信されたバイトストリームのserialVersionUIDをローカル対応エンティティ(クラス)のserialVersionUIDと比較し、同じであれば一致していると判断し、逆シーケンス化を行うことができ、そうでなければシーケンス化バージョンが一致しない異常が発生する.
    一般的にserialVersionUIDを定義する方法は、次の2つです.
    1.デフォルトの1L、具体的にはprivate static final long serialVersionUID = 1L;を使用する2.クラス名、インタフェース名、メンバーメソッド、および属性などに基づいて、private static final long serialVersionUID = XXXL;ビットのハッシュフィールドを生成する
    ここでは、IDEが64ビットのLongハッシュフィールドを生成する方法について説明する.
    ランダム生成ステップの詳細な配置:https://blog.csdn.net/weixin_42915286/article/details/83069223検索serialVersionUIDステップ1:プラグインGenerateSerialVersionUIDをインストールするステップ2:Inspections - Serializable class without 'serialVersionUID'Wariningに設定するステップ3:エンティティクラス名の中でimplementsがSerializableになったら、クラス名が間違って報告され、自動生成serialVersionUIDを提示するステップ4:serialVersionUIDをランダムに生成する;