31

インターフェイスが、Java のクラスに関するある種のメタデータを渡すために使用されるSerializable単なるマーカー インターフェイスである場合、少し混乱します。

Java のシリアライゼーション アルゴリズムのプロセス (メタデータを下から上へ、次に実際のインスタンス データを上から下へ) を読んだ後、そのアルゴリズムではどのデータを処理できないかがよくわかりません。

要するに正式には:

  1. 原因となる可能性のあるデータは何NotSerializableExceptionですか?
  2. implements Serializableクラスに句を追加することになっていないことをどのように知る必要がありますか?
4

9 に答える 9

6

Serializableクラスに含まれていないものはSerializableすべて、この例外をスローします。transientキーワード を使用することで回避できます。

シリアル化できないものの一般的な例には、Swing コンポーネントとスレッドが含まれます。考えてみれば、それらを逆シリアル化して意味をなすことはできなかったので、それは理にかなっています。

于 2013-05-31T06:37:00.607 に答える
4

独自のオブジェクトのシリアル化を処理する必要があります。

Java がプリミティブ データ型を処理します。

詳細: http://www.tutorialspoint.com/java/java_serialization.htm

于 2013-05-31T06:36:19.863 に答える
2

NotSerialisableシリアライズ可能の何かがシリアライズ可能としてマークされている場合、例外がスローされます。そのようなケースの 1 つが次のとおりです。

class Super{}
class Sub implements Serializable
{
Super super;

ここで super はシリアライズ可能とは言及されていないため、スローされNotSerializableExceptionます。

于 2016-05-10T15:33:51.627 に答える
0

より実際には、そのクラスが Serializable インターフェイスを実装しない限り、(Java の組み込みメカニズムを介して) オブジェクトをシリアライズすることはできません。ただし、そのようなクラスのインスタンスであることは十分な条件ではありません。オブジェクトが正常にシリアル化されるためには、オブジェクトが保持するすべての非一時的な参照が null であるか、シリアル化可能なオブジェクトを参照している必要があります。(これは再帰的な条件であることに注意してください。) プリミティブ値、null、および一時変数は問題ではありません。静的変数は個々のオブジェクトに属していないため、問題もありません。

一部の一般的なクラスは、シリアライゼーションに対して確実に安全です。ここではおそらく文字列が最も注目されますが、プリミティブ型のすべてのラッパー クラスも安全です。プリミティブの配列は確実にシリアライズ可能です。すべての要素をシリアル化できる場合、参照型の配列をシリアル化できます。

于 2013-05-31T06:43:58.433 に答える