首页 > 解决方案 > 当接收者没有它的类时通过套接字发送一个对象

问题描述

我有一个服务器,它从客户端接收一些对象,然后将该对象发送回客户端。
问题是服务器不一定具有该对象的类,因此在客户端中序列化该对象并将其发送到服务器并使用 ObjectInputStream 读取它会抛出 ClassNotFoundException。

我考虑过使用 DataInputStream 将序列化对象作为字符串读取,并将生成的字符串存储在服务器中,但这似乎不是正确的方法。

这是通过客户端中的套接字序列化和发送对象的代码(session.dos是套接字DataOutputStream)

ObjectOutputStream oos = new ObjectOutputStream(Connector.session.dos);
oos.writeObject(Connector.session.game);

我该怎么做才能读取服务器中的未知对象?
还是完全序列化错误的方法?那我该怎么办?

标签: javasocketsserialization

解决方案


如果你想要一种不同的、令人兴奋的方法,你可能会比使用 Apache Avro 做得更糟(肯定会有它的 Java 变体)。原因是 Avro 中的有线格式具有原始的 IDL 模式(在 Avro 的情况下实际上是 JSON)。这意味着接收者不一定需要看到模式来接收序列化数据和解释数据。因此,您可以将 Avro 序列化类作为字节数组接收,存储它们并忽略内容,但以防万一您改变主意,可以解释数据。

如果感兴趣,这里有一个入门页面。


推荐阅读