socket传递java序列化对象
socket传递java序列化对象时,对方系统没有关于这个对象类的定义,为什么在使用ObjectInputStream.readObject()获取对象时会失败。原本打算...
socket传递java序列化对象时,对方系统没有关于这个对象类的定义,为什么在使用ObjectInputStream.readObject()获取对象时会失败。原本打算通过获取的Object对象进行反射获取类的属性值,但是在获取Object对象就会报找不到类异常,虽然在反射时并不需要用到这个定义的类
展开
展开全部
其实就是楼主发现的原因, 对方系统没有关于这个对象类的定义。
ObjectInputStream.readObject() 需要能找到这个对象对应的class,才能实例化对象。。。
如果没有对象的定义, ObjectInputStream.readObject() 就不知道如何生成这个实例了
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方式的, 在读取数据时,有可能一个消息需要多次读取才能完整接收(比如网络很慢的情况下), 此时, 一般会在发送的消息前面加一个数据头,表示这条消息有多长。
建议楼主参考一下 网页链接 这方面的书籍
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询