0

かなり簡単な質問のようですが、グーグルで直接の答えを見つけることができません。

UDPを介した2つのプロセス間に単純なIPCチャネルがあります。各メッセージはヘッダークラ​​ス(データ駆動型など)でラップされます。

元。

enum Type 
{ 
 HELLO,
 BYE,
 LISTEN,
}

class Message
{
Type type;
Object data;
}

これMessageが私がに送信しているものですObjectOutputStream writeObjectdataこれは、ペイロードのないメッセージ(HELLOおよびBYE)に対しては正常に機能します。ただし、LISTENメッセージはdata属性をカスタムクラス(すべてのPODタイプ)に設定し、他のプロセスに到達することはないようです。readObject反対側にいると何も得られません。

だから私の質問は、私のクラス内writeObjectおよび/またはクラスタイプ内に実装が必要ですか?readObjectMessagedata's

---アップデート1---

はい、Messageタイプと基礎となるdataタイプの両方がimplements Serializableあり、すべての日食はserialVersionUID私のために生成されました。それで十分ですか?dataメッセージの一部がまだ表示されていません。

4

3 に答える 3

2

書き込まれるすべてのオブジェクトが。であることを確認してObjectOutputStreamくださいSerializable

Javadocは明確に次のように述べています。

ストリームに書き込むことができるのは、java.io.Serializableインターフェースをサポートするオブジェクトのみです。

class Messageそれが実装SerializableまたはExternalizableインターフェースであることを確認してください。


更新に基づいて、Object dataはでObjectあり、デフォルトでObjectはそうではありませんSerializable。として宣言できますSerializable data。前述のように、OutputStreamに書き込むことができるのはSerializableオブジェクトのみです

于 2012-05-26T22:07:38.420 に答える
1

実装することは、オブジェクトがシリアル化可能であるための必須条件writeObjectreadObjectはありません。これらは、シリアル化をカスタマイズすることのみを目的としており、有効化することを目的としていません。

于 2012-05-26T22:13:13.607 に答える
0

Serializableインターフェースを実装するだけで、オブジェクトをシリアル化する準備が整います。ただし、これらのメソッドをオーバーライドして、カスタムシリアル化を可能にすることができます。たとえば、GregorianCalendarをシリアル化することができます。グレゴリオ暦には膨大な量のデータ(タイムゾーンなど)があり、たとえば、日、月、時間のみを使用します。次に、それらのメソッドにその部分だけを書き込ませることで、他のすべてを保存することを回避できます。

于 2012-05-26T22:27:24.540 に答える