java - 当接收者没有它的类时通过套接字发送一个对象
问题描述
我有一个服务器,它从客户端接收一些对象,然后将该对象发送回客户端。
问题是服务器不一定具有该对象的类,因此在客户端中序列化该对象并将其发送到服务器并使用 ObjectInputStream 读取它会抛出 ClassNotFoundException。
我考虑过使用 DataInputStream 将序列化对象作为字符串读取,并将生成的字符串存储在服务器中,但这似乎不是正确的方法。
这是通过客户端中的套接字序列化和发送对象的代码(session.dos是套接字DataOutputStream)
ObjectOutputStream oos = new ObjectOutputStream(Connector.session.dos);
oos.writeObject(Connector.session.game);
我该怎么做才能读取服务器中的未知对象?
还是完全序列化错误的方法?那我该怎么办?
解决方案
如果你想要一种不同的、令人兴奋的方法,你可能会比使用 Apache Avro 做得更糟(肯定会有它的 Java 变体)。原因是 Avro 中的有线格式具有原始的 IDL 模式(在 Avro 的情况下实际上是 JSON)。这意味着接收者不一定需要看到模式来接收序列化数据和解释数据。因此,您可以将 Avro 序列化类作为字节数组接收,存储它们并忽略内容,但以防万一您改变主意,可以解释数据。
如果感兴趣,这里有一个入门页面。
推荐阅读
- docker-volume - 共享 docker 卷挂载主机目录
- vbscript - 我可以在 Classic ASP/VB 中使用另一个变量来设置数组变量的限制吗?
- javascript - 创建一个可以在报告的每一页上重复的 div。奥多 11
- css - 根据窗口宽度更改边距
- r - tidyr 稍后在函数中使用胶水字符串
- java - TTS 在 tensorflow 中无法用于手势检测 Android 应用
- flutter - Flutter:嵌套 ListView 有效。嵌套的 SliverList 没有,但 ListView 包含 Sliver
- python - 单线根据两个字典计算分数
- node.js - Zoom 云会议和录音
- swift - 从 Swift 调用 Objective-C -> 在范围内找不到类型“AppDelegate”