socket传递java序列化对象

socket传递java序列化对象时,对方系统没有关于这个对象类的定义,为什么在使用ObjectInputStream.readObject()获取对象时会失败。原本打算... socket传递java序列化对象时,对方系统没有关于这个对象类的定义,为什么在使用ObjectInputStream.readObject()获取对象时会失败。原本打算通过获取的Object对象进行反射获取类的属性值,但是在获取Object对象就会报找不到类异常,虽然在反射时并不需要用到这个定义的类 展开
 我来答
stzdzyhs
2017-12-20 · TA获得超过233个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:42.9万
展开全部
其实就是楼主发现的原因, 对方系统没有关于这个对象类的定义。
ObjectInputStream.readObject() 需要能找到这个对象对应的class,才能实例化对象。。。
如果没有对象的定义, ObjectInputStream.readObject() 就不知道如何生成这个实例了
追问
谢谢你啦,那这种情况怎么解决,不同系统的字段并不能保持一致,也不能要求对方和自己定义相同。
追答

办法1,把要发送的数据放到一个HashMap<String,String>中,序列化后通过socket发送给对方,对方可以通过ObjectInputStream.readObject() 得到 HashMap<String,String>

办法2: 把要发送的对象数据转成 json String发送。 比如可以使用fastjson库,网上也有很多fastjson教程

推荐使用方法2,因为json string是string格式的,方便调试。ObjectOutputStream转的数据是二进制的,比较麻烦.

另外, tcp socket是stream方式的, 在读取数据时,有可能一个消息需要多次读取才能完整接收(比如网络很慢的情况下), 此时, 一般会在发送的消息前面加一个数据头,表示这条消息有多长。

建议楼主参考一下 网页链接 这方面的书籍

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式