シリアル化可能なインタフェースの使用方法は何ですか、私はそれを調べ、Javaが内部的にこれを使用する多くの書籍を読み込みましたが、これ以上説明されていません。 interfaceこれはマーカーインターフェイスであり、本体には何もありません。このインターフェイスを実装していない場合は、オブジェクトをシリアル化しません。コアJavaのシリアル化可能なインタフェースについての簡単なクエリ
答えて
Serializable
インターフェイスはマーカーインターフェイスです。これは何を意味するのでしょうか?まあ、オブジェクトをシリアル化するために、次のようなコードを使用します。
final Foo interestingObject = new Foo(42);
final ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(interestingObject);
oos.close();
あなたはObjectOutputStream
にオブジェクトを渡すと、それはいくつかのことを行うためにリフレクションを使用しています。まず、渡されたオブジェクトがSerializable
を実装しているかどうかをチェックします。そうでない場合、writeObject()
はNotSerializableException
をスローします。次に、ObjectOutputStream
がオブジェクトのシリアル化を決定した後、オブジェクトの内容を反射的に調べ、フィールドのそれぞれを再帰的にシリアル化します(static
フィールドとtransient
としてマークされたフィールドを除く)。
このように、このオブジェクトはがにシリアル化されるべきであることを示す方法です。明示的にクラスをシリアライズできると明示していない場合は、ObjectOutputStream
はシリアライズを試みません。しかし、ObjectOutputStream
は、問題のオブジェクトの内部を調べるためにリフレクションを使用するため、Serializable
インターフェイスはメソッドを指定する必要はありません。ObjectOutputStream
のメソッドを呼び出す必要はありません。
(これはとにかく簡略化されたバージョンです。定義できる特定のシグネチャを持つ一連のメソッドがあり、存在する場合はシリアライゼーションメカニズムによって呼び出されます)。ObjectOutputStream
Javadocを参照してください。
あなたの質問に答えがあります - 「マーカーインターフェイスです」これは、オブジェクトグラフのすべてがSerializable
であることを確認し、そうでないものが見つかった場合に例外をスローするシリアライゼーションメカニズムのヒントにすぎません。その理由は、基本的にすべてのオブジェクトはがシリアル化されていますが、すべてが意味をなさないので、はシリアル化します(例えば、Socket
はネイティブファイル記述子を格納します - それを直列化して別のマシンに送信してデシリアライズすれば、 )。したがって、シリアル化する必要があるのは開発者によって決定されなければならず、開発者はSerializable
を実装して決定を明示します。
実用的な例を使って説明したいと思います。私はあなたと同じように多くの時間にわたって、シリアライゼーションを完全に理解しています。
最初に、オンラインのユーザーが表示されないアプリケーションを開発したいと考えています。私はtomcatクラスタ環境を使用しています。
私が行ったことは、ユーザーがログインするときにマップを作成したことです。ユーザーIDをマップに挿入し、地図を繰り返してオンラインユーザーリストを表示します。今の主な問題は、最初のユーザーはtomcat 1を介してログインし、2番目のユーザーはtomcat 2を介してログインします。この場合、jvmによって作成されたtomcat 1とtomcat 2のマップの2つの異なるオブジェクトが表示されます。ユーザーは適切にオンラインになります。
1.マップをシリアライズ可能なファイルに書き出し、マップにデータが存在しないかどうかをチェックします。ファイルに書き込む場合、データがあればファイルからデータを読み込み、マップに配置します。
主にserializableを使用すると、ネットワーク上のデータを送信するときに、オブジェクト状態をファイルに変換します。
- 1. プロパティがシリアル化可能でないエラー
- 2. ビットセットの簡単な連結を可能にするJava BitSet
- 3. Javaパッケージの継承、簡単なクエリ
- 4. Java - 実行可能なJAR?簡単な逆コンパイル?
- 5. 比較的簡単なJava POJOをシリアル化する最速の方法は?
- 6. Python Flask - 簡単なクエリ機能
- 7. パブリック列挙型をシリアル化/逆シリアル化する簡単な方法は?
- 8. 簡単なSQLクエリのヘルプ
- 9. 簡単なソート可能な例ES6の代わりに、ES7
- 10. Androidの複雑なシリアライズ可能なオブジェクト - 簡単な方法
- 11. C#オブジェクトをシリアル化する簡単な方法
- 12. Javaでの簡単なネットワークチャット
- 13. Javaの簡単な問題
- 14. 2つの可能な値のSQLクエリ?
- 15. PHP配列 - 簡単なクエリ
- 16. シリアル化可能オブジェクトの書き込み可能なIOExceptionの発生[QUICKBLOX DIALOG]
- 17. LinkedIn API - ログインしていない簡単なクエリ
- 18. C#を使用してJava逆シリアル化可能オブジェクトをシリアライズ
- 19. 直列化不可能な部分を含むPHPシリアル化
- 20. MySQLの簡単な初心者のクエリ?
- 21. 簡単なスカラ直列化?
- 22. シリアル化、serialVersionUID、互換性のないクラスについて
- 23. 簡単なWebサイトのためのツール(ノンテクニシャンで更新可能)
- 24. ポリモリックで拡張可能なシリアル化メソッドの実装方法
- 25. ManyToOne参照で埋め込み可能なSpringデータのシリアル化
- 26. 非シリアル化可能なEntityManagerでのステートフルセッションBeanパッシベーション?
- 27. CAGradientLayerはONLY次のコードを使用して、可能な限り簡単なユースケース
- 28. 可能な限り簡単なUbuntu GUIアプリケーション
- 29. シリアル化可能なパブリックフィールドにブレークポイントを追加する方法は?
- 30. MySQLの簡単な検索クエリ
あなたの質問が何であるかはあまり明確ではありません。なぜなら、あなたはそのインターフェイスが正確に何かを得ているように思われるからです。単なるタグであり、シリアライズに必要なタグです。具体的に何を理解していないのですか? – Mat
ちょっと、私は、任意のインターフェイスにボディがない場合私はなぜ私たちはそのインターフェイスを実装する必要があります取得していない場合は、私はそのインターフェイスを実装していない場合は任意のperticularクラスは、 )しかし、私たちはシリアライズ可能なオブジェクトを直列化する必要があることを知っています。私はあなたが尋ねたいものを得るでしょう... –
オブジェクトがデフォルトで直列化可能だった場合、望ましくないクラスをマークする方法が必要ですシリアライズ可能で、特別なマーカーが必要になりますそのインターフェイスは、開発者が「このクラスを正しくシリアル化できる」ことを示すために必要です。 – Mat