問題タブ [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.

0 投票する
2 に答える
77 参照

java - Externalizable クラスのすべてのシリアル化されたフィールドを取得する

外部化可能なクラスがいくつかあります。シリアル化されたすべてのフィールドを返すメソッドを作成するにはどうすればよいですか? または、どのフィールドがシリアル化されているかを確認するにはどうすればよいですか?

0 投票する
2 に答える
706 参照

java - 内部クラスによる外部化

このサイトの外部化に関する記事を読んでいて、外部化セクションの制限で次の段落を見つけました。

ご存じのように、Externalizable インターフェイスを実装するオブジェクトをシリアル化するときに、デフォルトの public no-arg コンストラクターが呼び出されます。したがって、Java の内部クラスのすべてのコンストラクターは、外側のクラスのインスタンスを先頭に追加されたパラメーターとして常に受け入れるため、Java の内部クラスによって Externalizable インターフェイスを実装することはできません。したがって、引数のないコンストラクターを使用することはできません内部クラス。内部クラスは、Serializable インターフェイスを実装するだけで、オブジェクトのシリアル化を実現できます。

これをテストしたところ、これは有効ではないことがわかりました。内部クラスは引数コンストラクターを持つことができず、Externalizableインターフェイスを実装することもできます。ローカルクラスでも試してみました。正常に動作します。

したがって、いくつかの点が欠けているか、記事の段落が無効になっています (私は Java 7 を使用しています)。それで、それはどれですか。どんな提案でも大歓迎です。

0 投票する
1 に答える
75 参照

java - Externalizable と Serializable に関する質問

readResolve および writeReplace メソッドを使用して、Externalizable および Serializable インスタンスの両方の置換オブジェクトを指定できます...

いくつかのことを知りたかっただけです:

1) readObject(ObjectInputStream is ) および writeObject(ObjectOutputStream os) メソッドを、Serilaizable クラスの readResolve() および writeReplace() と組み合わせて使用​​できますか? オブジェクトを置き換えてから、readObject と writeObject を使用してバイト ストリームに変更操作を実行することは可能ですか?外部化できない) または、インスタンスをストリームに書き込むときに Serilizable クラスの状態が自動的に保存されますか?

0 投票する
1 に答える
109 参照

java - シリアライゼーションでカスタマイズが可能なら、なぜ Externalizable なのですか?

私はこれらの記事を読みましたSO:

外部化可能またはシリアライズ可能?

JavaのSerializableとExternalizableの違いは何ですか? .

しかし、私の質問はExternalizableserializable.

と の独自の実装を与えることで、実装するをカスタマイズすることができSerializationます。次に、実装を使用およびカスタマイズする目的は何 ですか。を使用する本当の利点は何ですか。カスタムをサポートしているというさまざまなリンクを読みました(上記のものを含む)。しかし、 が明確な勝者である例や、 を使用して実行できない例は見当たりません。これに関する例を見るといいでしょう。classSerializablewriteObjectreadObjectExternalizableReadExternalwriteExternalExternalizableExternalizableserializationExternalizableSerializable

より明確にするために、次のスニペットはhereから抽出されています。

class実装されると、これらのをシリアル化できるというSerializable interface情報が に提供されます。それに伴い、特記事項として、JVMinstancesclassesJVM

「Serializable を実装するクラスで次の 2 つのメソッドを探します。見つかった場合はそれを呼び出し、シリアル化プロセスを続行するか、標準のシリアル化プロトコルに直接従ってください」

したがって、これにより、次の 2 つのメソッドを作成する機会が得られます。

private void writeObject(ObjectOutputStream out) throws IOException;private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

Classその実装内でSerializable、プロセスへのフックを取得しserializationます。これら 2 つのメソッド内にカスタム コードを記述して、 の標準動作をカスタマイズできますserialization

0 投票する
1 に答える
1174 参照

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 クラスで:

0 投票する
2 に答える
165 参照

java - シリアライズ可能で外部化可能。逆シリアル化中のコンストラクター呼び出しの違い

次の記事を読みました。

http://javapapers.com/core-java/externalizable-vs-serializable/

オブジェクトの逆シリアル化 (再構成) では、引数のない public コンストラクターを使用してオブジェクトを再構成します。Serializable の場合、コンストラクターを使用する代わりに、オブジェクトは ObjectInputStream から読み取ったデータを使用して再構築されます。
上記の点により、Externalizable オブジェクトには引数のない public コンストラクターが必要であることが要求されます。Seriablizable の場合、必須ではありません。

コンストラクター呼び出しについては本当ですか

シリアライズ可能:デシリアライゼーションは、最も近い非祖先
のコンストラクタのみを呼び出しますSerializable

外部化可能:逆シリアル化は、インターフェイスのみ
を実装するクラスのコンストラクターを呼び出します。Externalizable

?

0 投票する
1 に答える
669 参照

java - final インスタンス変数を外部化する

ここに私のサンプルコードがあります:

id = in.readInt();を与えるため、コンパイルに失敗しますError:(36, 5) java: cannot assign a value to final variable id。ただし、id などの不変フィールドを外部化する必要がある一方で、その不変性も保持したいという実際の使用例を考えることができます。

では、この問題を解決する正しい方法は何ですか?

0 投票する
1 に答える
1912 参照

java - デフォルトのコンストラクタが存在する場合でもJavaが「有効なコンストラクタがありません」と文句を言うのはなぜですか?

ExternalizableClassとclass の両方に、ExternalizableClass.Writeデフォルトの (引数以外の) コンストラクターがあります。しかし、それをデシリアライズするとき、Java は不平を言います:

誰が問題が何であるかを説明できますか?