JAVA程序开发小经验 - 使用ObjectStream会出现的问题

object|stream|程序|问题

1. ObjectInputStream与ObjectOutputStream的顺序问题
在网络通讯中,主机与客户端若使用ObjectInputStream与ObjectOutputStream建立对象通讯,必须注意声明此两个对象的顺序。
如:
主机端先建立ObjectInputStream后建立ObjectOutputStream,则对应地客户端要先建立ObjectOutputStream后建立ObjectInputStream,否则会造成两方互相等待数据而导致死锁。
原因是建立ObjectInputStream对象是需要先接收一定的header数据,接收到这些数据之前会处于阻塞状态。以下为JAVA API文档的说明
Creates an ObjectInputStream that reads from the specified InputStream.
A serialization stream header is read from the stream and verified.
This constructor will block until the corresponding ObjectOutputStream
has written and flushed the header.

故而为了防止这种死锁状态,通讯两方的ObjectInputStraem,ObjectOutputStream必须注意顺序对应使用。

2. ObjectInputStream接收到非ObjectOutputStream数据的问题
在使用ObjectInputStream与ObjectOutputStream对象通讯的通讯双方,假设客户端程序出现错误,发送了非ObjectOutputStream封装发送的数据(比如发送一个数字或字符串到主机),则主机端的ObjectInputStream接收到错误数据后不能自动纠正,会一直接收数据而处于阻塞状态,从而导致通讯失败。尚未找到解决方法。目前想的办法为写自己的ObjectStream类。

3. 解决版本问题
使用ObjectStream的时候会额外发送一个关于对象的序列号
static final long serialVersionUID = ....
手动加入此域则可避免版本差异导致的问题。
对象序列号的计算可用SDK的serialver计算。

时间: 2024-10-07 20:44:31

JAVA程序开发小经验 - 使用ObjectStream会出现的问题的相关文章

java程序开发大全之光盘损坏,是否有好心人愿意提供下光盘信息内容

问题描述 大家好,我前几个周在网上买了一本书<<java程序开发大全>>--基于MyEclipse平台+Struts+Hibernate+Spring主流框架开发,是中国铁道出版社出版的,孙更新宾晟宫成文编著,但是书邮寄的时候把光盘给弄坏了,书我已经写上名字了,没有办法看光盘的内容,有哪位好心的大哥哥,大姐姐,有买过这本书的能给提供下光盘的内容么?小弟深表感激!本人邮箱是:383570435@qq.com 解决方案 解决方案二:额买的不是那本书,不好帮忙了

使用技巧:Java程序开发中如何应用线程

程序|技巧 Java平台从开始就被设计成为多线程环境.在你的主程序执行的时候,其它作业如碎片收集和事件处理则是在后台进行的. 本质上,你可以认为这些作业是线程.它们正好是系统管理线程,但是无论如何,它们是线程.线程使你能够定义相互独立的作业,彼此之间互不干扰.系统将交换这些作业进或出cpu,这样(从外部看来)它们好象是同时运行的. 在你需要在你的程序中处理多个作业时,你也可以使用多个进程.这些进程可以是你自己创建的,你也可以操纵系统线程.你进行这些多作业处理,要使用几个不同的类或接口: java

Java程序开发中代理技术的使用方法

程序 如果你这样的需求:在运行时创建实现一组给定接口的类,注意这个类是在运行时创建的,你就需要使用JAVA中的代理类来达成你的要求. 代理类提供在运行时创建类的能力,这个新建的类能实现你指定的接口. 当然你不能在运行时为要实现的接口中的方法定义新代码,而是提供一个调用处理器来实现.调用处理器是实现了InvocationHandler接口的类的对象,此接口只有一个方法: Object invoke(Object proxy,Method mtd,Object[] args) 其中proxy是代理对

成都:招聘.net、java程序开发人员

问题描述 招聘详细信息<> 解决方案 解决方案二:网站开不了

Java程序开发工具——myeclipse的下载地址是什么呀!?

问题描述 求解:myeclipse平台64位的win8.1的操作系统! 解决方案 解决方案二: 解决方案三:引用1楼magi1201的回复:好简陋的官网解决方案四:引用2楼email0614的回复: Quote: 引用1楼magi1201的回复:好简陋的官网 不知道那个是不是MyEclipse的官网,没有用MyEclipse一直都用eclipse的,看到楼主问MyEclipse的问题,就随便搜了一下,这个网站提供的网址确实可以下载解决方案五:网上很多的,百度一下都有的.解决方案六:官网百度,网盘

从根本上改变我们开发Java程序的方式:Lambda

当今世界主流编程语言无不吸纳强大的闭包概念,但有个例外,它就是Java.数年来,Java语言中增加闭包特征的工作看起来毫无进展. 早在15年之前,Scala语言和TypeSafe框架的作者Martin Odersky和Phillip Wadler发布了实验性的"Pizza"项目,由此,人们开始试图将闭包纳入编程语言的基本特征之一.尽管这看起来有点过于复杂,Java社区大概在2008年就有了接纳闭包概念的想法.但由于Oracle对Sun微系统公司的匆忙收购,Java被冷落,Java语言新

一个应届生做java软件开发,应该如何规划自己?

问题描述 大家好,我是一名刚毕业的应届生,目前从事java程序开发,在一家互联网公司上班,上班已有一个多月了.刚来还不能进项目组,只是先搞一个管理系统,功能主要是对数据的增加,删除,修改.能否学到东西目前还不清楚,因为公司搞的都是自己的产品.请问如果我要在j2ee的道路上有所成就,我应该怎么做?,我应该如何去做?本人自学了 struts,spring,hibernate ,dwr.谢谢!问题补充:我应该 学些什么?能列举些实例吗? 解决方案 公司有自己的业务和产品,那么你很幸运,没有进入外包的胡

自动检测并行Java程序中的错误

当 CPU 进入多核时代之后,并行编程将更加流行,但是编写并行程序更容易 出错.在开发过程中,工程师能注意到同一个程序在单线程运行时是正确的,但 是在多线程时,它会有可能出错.和并行相关的错误的产生原因通常都非常隐晦 ,而且在一次测试中,它们的出现与否具有很强的随机性.由于程序中多个线程 之间可能以任意的方式交错执行,即使一个并行程序正确的运行了成百上千次, 下一次运行仍然可能出现新的错误. Multi-Thread Run-time Analysis Tool 是由 IBM 为多线程 Java

Java程序员的日常—— Properties文件的读写

在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Properties. 文件的读取 Properties类提供了Load方法,支持以inputstream为参数,读取配置文件.因此可以这样: Properties props = new Properties(); //如果配置文件放在类目录下,可以直接通过类加载器读取 props.load(new Fi