問題タブ [externalizable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Externalizable クラスのすべてのシリアル化されたフィールドを取得する
外部化可能なクラスがいくつかあります。シリアル化されたすべてのフィールドを返すメソッドを作成するにはどうすればよいですか? または、どのフィールドがシリアル化されているかを確認するにはどうすればよいですか?
java - 内部クラスによる外部化
このサイトの外部化に関する記事を読んでいて、外部化セクションの制限で次の段落を見つけました。
ご存じのように、Externalizable インターフェイスを実装するオブジェクトをシリアル化するときに、デフォルトの public no-arg コンストラクターが呼び出されます。したがって、Java の内部クラスのすべてのコンストラクターは、外側のクラスのインスタンスを先頭に追加されたパラメーターとして常に受け入れるため、Java の内部クラスによって Externalizable インターフェイスを実装することはできません。したがって、引数のないコンストラクターを使用することはできません内部クラス。内部クラスは、Serializable インターフェイスを実装するだけで、オブジェクトのシリアル化を実現できます。
これをテストしたところ、これは有効ではないことがわかりました。内部クラスは引数コンストラクターを持つことができず、Externalizable
インターフェイスを実装することもできます。ローカルクラスでも試してみました。正常に動作します。
したがって、いくつかの点が欠けているか、記事の段落が無効になっています (私は Java 7 を使用しています)。それで、それはどれですか。どんな提案でも大歓迎です。
java - Externalizable と Serializable に関する質問
readResolve および writeReplace メソッドを使用して、Externalizable および Serializable インスタンスの両方の置換オブジェクトを指定できます...
いくつかのことを知りたかっただけです:
1) readObject(ObjectInputStream is ) および writeObject(ObjectOutputStream os) メソッドを、Serilaizable クラスの readResolve() および writeReplace() と組み合わせて使用できますか? オブジェクトを置き換えてから、readObject と writeObject を使用してバイト ストリームに変更操作を実行することは可能ですか?外部化できない) または、インスタンスをストリームに書き込むときに Serilizable クラスの状態が自動的に保存されますか?
java - シリアライゼーションでカスタマイズが可能なら、なぜ Externalizable なのですか?
私はこれらの記事を読みましたSO
:
JavaのSerializableとExternalizableの違いは何ですか? .
しかし、私の質問はExternalizable
、serializable
.
と の独自の実装を与えることで、実装するをカスタマイズすることができSerialization
ます。次に、実装を使用およびカスタマイズする目的は何 ですか。を使用する本当の利点は何ですか。カスタムをサポートしているというさまざまなリンクを読みました(上記のものを含む)。しかし、 が明確な勝者である例や、 を使用して実行できない例は見当たりません。これに関する例を見るといいでしょう。class
Serializable
writeObject
readObject
Externalizable
ReadExternal
writeExternal
Externalizable
Externalizable
serialization
Externalizable
Serializable
より明確にするために、次のスニペットはhereから抽出されています。
がclass
実装されると、これらのをシリアル化できるというSerializable interface
情報が に提供されます。それに伴い、特記事項として、JVM
instances
classes
JVM
「Serializable を実装するクラスで次の 2 つのメソッドを探します。見つかった場合はそれを呼び出し、シリアル化プロセスを続行するか、標準のシリアル化プロトコルに直接従ってください」
したがって、これにより、次の 2 つのメソッドを作成する機会が得られます。
private void writeObject(ObjectOutputStream out) throws IOException;
、
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
Class
その実装内でSerializable
、プロセスへのフックを取得しserialization
ます。これら 2 つのメソッド内にカスタム コードを記述して、 の標準動作をカスタマイズできますserialization
。
java - Javaでシリアル化されたオブジェクトをパーツごとにロードする方法
インターフェイスを使用して Java で大きなサイズのオブジェクトをシリアル化しようとしていExternalizable
ます。
コード:
プログラムの実行中にいっぱいになった 3 つの arrayList は、非常に大きなサイズ (それぞれ 14 MB) です。
コード(読み込み/保存処理):
壊れない条件は、たとえば、ファイルを 1 つだけにしたいということです。Documents/Project/project1.res
他の部分をロードせずに、オブジェクトの一部をロードするにはどうすればよいですか? 出来ますか?たとえば、最初の 2 つの arrayList (results1 と results2) をロードする必要はありませんが、3 つ目の arrayList (results3) のみをロードする必要がありますが、results3 にアクセスする唯一の方法は、results1 と results2 を読み取ることです。
Tinke の回答のコード:
ResultsData クラスで:
java - シリアライズ可能で外部化可能。逆シリアル化中のコンストラクター呼び出しの違い
次の記事を読みました。
http://javapapers.com/core-java/externalizable-vs-serializable/
オブジェクトの逆シリアル化 (再構成) では、引数のない public コンストラクターを使用してオブジェクトを再構成します。Serializable の場合、コンストラクターを使用する代わりに、オブジェクトは ObjectInputStream から読み取ったデータを使用して再構築されます。
上記の点により、Externalizable オブジェクトには引数のない public コンストラクターが必要であることが要求されます。Seriablizable の場合、必須ではありません。
コンストラクター呼び出しについては本当ですか
シリアライズ可能:デシリアライゼーションは、最も近い非祖先
のコンストラクタのみを呼び出しますSerializable
外部化可能:逆シリアル化は、インターフェイスのみ
を実装するクラスのコンストラクターを呼び出します。Externalizable
?
java - final インスタンス変数を外部化する
ここに私のサンプルコードがあります:
id = in.readInt();
を与えるため、コンパイルに失敗しますError:(36, 5) java: cannot assign a value to final variable id
。ただし、id などの不変フィールドを外部化する必要がある一方で、その不変性も保持したいという実際の使用例を考えることができます。
では、この問題を解決する正しい方法は何ですか?
java - デフォルトのコンストラクタが存在する場合でもJavaが「有効なコンストラクタがありません」と文句を言うのはなぜですか?
ExternalizableClass
とclass の両方に、ExternalizableClass.Write
デフォルトの (引数以外の) コンストラクターがあります。しかし、それをデシリアライズするとき、Java は不平を言います:
誰が問題が何であるかを説明できますか?