引言
之前发过一篇关于对象流丢失数据的问题的博客:
https://blog.csdn.net/Aurora1004/article/details/110674893
之后意外收获了大佬的评论解答 @FaceSeace
在网上查询该知识点无果。在参考大佬的解答,查阅 jdk 帮助文档后,对其运行原理有了更深刻的理解。
(一) 问题引入
不妨可以想想流的工作原理:
-
当我们将通道构建好之后,发送端通过 ObjectOutputStream 类中的writeObject(Object obj) 方法将对象存入缓存中,再通过 flush() 方法将缓存刷新;
-
接收端通过 ObjectInputStream 中的 readObject() 将该对象接收。
在项目工作中,需要多次发送对象时,依次调用即可。
但是,最后便会出现多次发送时,接收端数据丢失的问题:
(二) 解决方法
在发送之前调用 writeUnshared(Object obj) 或 reset() 方法