我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019全年资料大全正版 > 反序列化 >

服务器发送的对象客户端读取反序列化失败?

归档日期:08-15       文本归类:反序列化      文章编辑:爱尚语录

  在写我的大厅和房间时,只有大厅里有一个收集客户端的容器。每一条消息,是包在一个我自己写的类(MyObject implements Serializable)里面。所有与服务器之间的通讯的对象都继承自这个类。这个类里面有标识这些消息发自客户端所处位置(大厅,房间)的属性。

  目前处于修改阶段,所以暂且是每条服务器发送给客户端的消息都是发送给所有客户端,由客户端 接收以后 自己判断是否与自己所处位置(大厅,房间)符合,决定是否执行。

  查了API,发现ObjectStreamClass是序列化的标志头,应该是说我的对象被拆散了,也就是说我序列化的对象被拆散成了好几个对象发过来。请问各位大侠,这是为什么呢?

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  从上面可以看到是对基本数据类型序列化和反序列化,String及数组等不是基本数据类型

  在 Java 中,字符串和数组都是对象,所以在序列化期间将其视为对象。读取时,需要将其强制转换为期望的类型。

  readObject 方法负责使用通过对应的 writeObject 方法写入流的数据,为特定类读取和恢复对象的状态。该方法本身的状态,不管是属于其超类还是属于其子类,都没有关系。恢复状态的方法是,从个别字段的 ObjectInputStream 读取数据并将其分配给对象的适当字段。DataInput 支持读取基本数据类型。

  尝试读取由对应的 writeObject 方法写入的超出自定义数据边界的对象数据将导致抛出 OptionalDataException(eof 字段值为 true)。超出已分配数据末尾的非对象读取以指示流末尾的方式反映数据结束:按位读取与字节读取或字节数读取一样,将返回 -1,基元读取将抛出 EOFException。

  读取对象类似于运行新对象的构造方法。为对象分配内存并将其初始化为零 (NULL)。为不可序列化类调用无参数构造方法,然后从以最接近g.object 的可序列化类开始和以对象的最特定类结束的流恢复可序列化类的字段。

  从上面看,反序列化时读出的数据皆为基本数据类型,然后可能要自己重新组合成为你要的MyObject类型,如

本文链接:http://buggystordera.com/fanxuliehua/881.html