当接收者没有类时通过套接字发送对象

时间:2019-06-02 17:42:17

标签: java sockets serialization

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您打算采用一种不同而又令人兴奋的方法,那么可能会比使用Apache Avro(它一定是Java的变体)做得更糟。原因是Avro中的有线格式中包含原始IDL模式(在Avro的情况下实际上是JSON)。这意味着收件人不必一定要了解架构即可接收序列化数据和解释数据。因此,您可以将Avro序列化的类作为字节数组接收,存储它们并忽略内容,但是以防万一您改变主意可以解释数据。

如果有兴趣的话,会有一个入门页面here