シリアル化可能なインタフェースの使用方法は何ですか、私はそれを調べ、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. MySQLについての簡単なクエリ
- 2. Javaでのシリアル化可能でないオブジェクト(org.apache.kafka.clients.consumer.ConsumerRecord)spark kafkaストリーミング
- 3. ビットセットの簡単な連結を可能にするJava BitSet
- 4. プロパティがシリアル化可能でないエラー
- 5. Javaパッケージの継承、簡単なクエリ
- 6. タスクがシリアル化可能ではない - Spark Java
- 7. jQuery UIのソート可能なシリアル化
- 8. Java - 実行可能なJAR?簡単な逆コンパイル?
- 9. シリアライズ不可能な第三者クラスのJavaシリアル化
- 10. Javaシリアル化についての説明
- 11. シリアル化可能な属性を持たないバイナリシリアル化
- 12. 比較的簡単なJava POJOをシリアル化する最速の方法は?
- 13. パブリック列挙型をシリアル化/逆シリアル化する簡単な方法は?
- 14. Python Flask - 簡単なクエリ機能
- 15. JSONシリアル化可能なPython3辞書スタイルオブジェクトマッピング
- 16. mysql簡単なクエリ+
- 17. 簡単なJavaScriptクエリ
- 18. 簡単なSQLクエリのヘルプ
- 19. 簡単なソート可能な例ES6の代わりに、ES7
- 20. Androidの複雑なシリアライズ可能なオブジェクト - 簡単な方法
- 21. Recyclerviewでシリアル化可能なデータが表示されない
- 22. シリアライゼーション:シリアル化されたオブジェクトのシリアル化可能でないコンポーネントが見つかりません
- 23. C#オブジェクトをシリアル化する簡単な方法
- 24. 簡単なJavaジェネリックスの例
- 25. Javaの簡単な問題
- 26. Javaの簡単な使用
- 27. Javaでの簡単なネットワークチャット
- 28. 可能な限り簡単なタイムアウト/コールドダウン機能?
- 29. シリアル化可能クラスに含まれるオブジェクト型enumのシリアル化
- 30. OptaPlanerの簡単な例cant実現可能な解決策を見つける
あなたの質問が何であるかはあまり明確ではありません。なぜなら、あなたはそのインターフェイスが正確に何かを得ているように思われるからです。単なるタグであり、シリアライズに必要なタグです。具体的に何を理解していないのですか? – Mat
ちょっと、私は、任意のインターフェイスにボディがない場合私はなぜ私たちはそのインターフェイスを実装する必要があります取得していない場合は、私はそのインターフェイスを実装していない場合は任意のperticularクラスは、 )しかし、私たちはシリアライズ可能なオブジェクトを直列化する必要があることを知っています。私はあなたが尋ねたいものを得るでしょう... –
オブジェクトがデフォルトで直列化可能だった場合、望ましくないクラスをマークする方法が必要ですシリアライズ可能で、特別なマーカーが必要になりますそのインターフェイスは、開発者が「このクラスを正しくシリアル化できる」ことを示すために必要です。 – Mat