关于对象流两端的数据不一致的问题:
下图为服务器端收发数据时的状态:此时players列表中有两个对象但是到客户端接收时,却只有一个对象了,经过多次测试,发现每次只有GameMessage这个类有问题,所以排除多种可能,最终确定是序列化时的问题。
原因如下:
GameMessage这个类中有players这个ArrayList对象的引用,该引用在调用带参数的构造方法时被赋值,以下该构造函数:
public GameMessage(ArrayList<Player> players, Point food)
{super();//this.players = players;//this.players.addAll(players);for(Player player : players){this.players.add(new Player(player));}//this.food = food;this.food = new Point(food);
}

没修改前是把本类中的引用指向了堆中的原有对象,那么此时在堆中只有唯一的一个对象,在对象流进行多次序列化时,会认为是同一个对象在进行序列化,从而不会多次序列化,而是只输出第一次序列化时的那个编号,那么每次收到时其实只能反序列化出第一次发送过来的那个players列表了!

修改之后,每次赋值都新建一个对象,那么每次序列化时JVM都会重新序列化players列表,此时输出端的数据就正常了。
 
具体原理如下:(java疯狂讲义)
服务器端发送数据时状态(此时players列表中有两个玩家):

此时客户端接受处在等待(卡在read语句):

客户端接收到数据时的状态(此时的players列表只有一个玩家了):

转载于:https://www.cnblogs.com/bchen/p/7446675.html

关于对象流两端的数据不一致的问题:相关推荐

  1. 【Java-IO】File、搜索删除剪切、字符集、字符编码、字节流、将内存中的数据写入文件、字符流、缓冲流、Scanner、格式化输出、数据流、对象流、序列化与反序列化、Files工具类

    IO 文章目录 IO 简介 File 分隔符.大小写 常用方法 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 字节 ...

  2. 让你的数据和对象有源有出路,一文打尽,Java常用IO流处理流(处理字节流文件流)缓冲流、转换流、对象流等

    文章目录 缓冲流 转换流 标准输入输出流 打印流 数据流 对象流 随机存取文件流 Java NIO 缓冲流 为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个 ...

  3. bootstrap$核心对象数据不一致导致ORA-08102

    原文链接 个人博客http://www.killdb.com/?p=201 昨天准备研究11g的query cache result 特性,准备用10g的老方法来直接通过 show parameter ...

  4. mysql缓存淘汰机制_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....

    在实际的工作项目中, 缓存成为高并发.高性能架构的关键组件 ,那么Redis为什么可以作为缓存使用呢?首先可以作为缓存的两个主要特征: 在分层系统中处于内存/CPU具有访问性能良好, 缓存数据饱和,有 ...

  5. redis 查询缓存_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....

    在实际的工作项目中, 缓存成为高并发.高性能架构的关键组件 ,那么Redis为什么可以作为缓存使用呢?首先可以作为缓存的两个主要特征: 在分层系统中处于内存/CPU具有访问性能良好, 缓存数据饱和,有 ...

  6. 流计算引擎数据一致性的本质

    简介: 本篇文章从流计算的本质出发,重点分析流计算领域中数据处理的一致性问题,同时对一致性问题进行简单的形式化定义,提供一个一窥当下流计算引擎发展脉络的视角,让大家对流计算引擎的认识更为深入,为可能的 ...

  7. IO流基本知识总结【字节输入输出流、字符输入输出流、转换流、对象流】

    1.概述: 流是可以承载东西的数据流:java中io流也是用来承载运输数据的. 2.分类: 1.按流向分:[参考内存:进入内存叫做输入,出内存叫做输出] 1.输入流:承载数据进入内存的流叫做输入流 2 ...

  8. 下面( )对象表示标准输入对象流。_7000字带你死磕Java I/O流知识

    IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题.我们把数据源和目的地可以理解 ...

  9. 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句

    I/O流 File File 常用方法 File 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 try-with- ...

最新文章

  1. 在对话框中应用CScrollView显示图像
  2. linux挂载硬盘_一篇文章带你了解 linux 如何进行挂载
  3. threading模块使用_threading简介(创建多线程的两种方法)★
  4. HyperLink 鼠标经过时候显示全部文字
  5. obj: object是什么意思_面试官问你JavaScript基本类型时他想知道什么?
  6. Matlab 进行FFT
  7. sql 语言中 when case 用法
  8. 没事随便写写——matlab图像与矩阵的转换与存储为txt文件
  9. 如何在Hyper-V上安装Centos7
  10. 贵大计算机在职,贵州大学在职研究生招生信息网
  11. .NET/C# 使用Stopwatch测量运行时间
  12. 斗鱼第三方开放平台2.2版使用记录
  13. 帆软日期格式转换_日期和时间函数- FineReport帮助文档 - 全面的报表使用教程和学习资料...
  14. extjs java 教程_[Java教程]ExtJS 第一个程序
  15. 计算机网络 第七版【谢希仁】部分答案(第1~7章)【附:电子书】
  16. Android 各国语言包字符串缩写
  17. 如何学习硬件设计——理论篇
  18. AM、FM、PM调制技术
  19. 全球及中国回转窑扫描仪行业发展动态与前景趋势预测报告2022-2028年
  20. PCDN服务接入实操手册

热门文章

  1. 渗透测试攻击(二)——wireshark过滤数据包语法详解
  2. vnpy策略回测如何设置滑点手续费和size
  3. 建立可视化决策平台,“数据化”首当其冲! 1
  4. Kalman Filter --卡尔曼滤波
  5. Multi-Armed Bandit--基于时变多臂老虎机的在线上下文感知推荐
  6. python编程语言继承_Python 面向对象编程——继承和多态
  7. STL常用函数总结-vector
  8. 【caffe-windows】 caffe-master 之 classfication_demo.m 超详细分析
  9. 模拟登陆——以github为例
  10. 2019 蓝桥杯省赛 B 组模拟赛(一) 程序设计:后缀字符串 ( STL map 和 substr()函数的应用)