java - 何时覆盖 writeObject/readObject?

标签 java serialization

似乎是一个非常简单的问题,但我在谷歌上找不到直接答案。

我在两个进程之间通过 UDP 有一个简单的 IPC channel 。每条消息都包装在 header 类中(例如数据驱动)。

例如。

enum Type 
{ 
 HELLO,
 BYE,
 LISTEN,
}

class Message
{
Type type;
Object data;
}

Message是我发送到 ObjectOutputStream writeObject 的内容。这对于没有 data 的消息效果很好。有效负载(例如 HELLOBYE )。然而LISTEN消息设置 data属性到自定义类(具有所有 POD 类型),并且它似乎永远不会到达其他进程。当我 readObject另一方面我什么也没得到。

所以我的问题是我需要一个工具writeObjectreadObject在我的里面Message类和/或 data's 内类类型?

--- 更新 1 ---

是的,Message类型和基础 data类型有implements Serializable所有 eclipse 都会生成 serialVersionUID为我。这样就足够了吗?我仍然没有看到 data消息的一部分。

最佳答案

确保写入 ObjectOutputStream 的所有对象都是可序列化

Javadoc明确指出:

Only objects that support the java.io.Serializable interface can be written to streams.

确保类消息实现SerializedExternalizable界面。

<小时/>

根据您的更新,对象数据是一个对象,默认情况下,对象不是可序列化 。您可以将其声明为可序列化数据。如前所述,只有可序列化的对象才能写入 OutputStream

关于java - 何时覆盖 writeObject/readObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10770120/

相关文章:

java - .class文件反编译后看不到Super()

java - Akka 心跳延迟

java - 如何在 Ruby 程序中捕获 java.sql.sqlException?

json:无法将对象解码为 Auction.Item 类型的 Go 值

json - 在Scala的剧本中使用Json序列化处理具有多个案例类(和类型)的特质

java - 如何停止子类的序列化?

PHP反序列化没有匹配类的对象

java - 如何删除 TableColumn 中的 HTML 标签

java - 如何使用 Ant 扩展 xml 文件中的非实体引用

c# - 为什么要序列化的对象需要Serializable Attribute