使用ObjectStream会出现的问题
来源:互联网 发布:板会用什么软件 编辑:程序博客网 时间:2024/05/16 07:10
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计算。
在网络通讯中,主机与客户端若使用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计算。
- 使用ObjectStream会出现的问题
- JAVA程序开发小经验 - 使用ObjectStream会出现的问题
- ObjectStream的使用
- Java 使用 ObjectStream 时的注意事项
- 使用HostingEnvironment.Impersonate会出现的一个问题
- Gson与Hibernate结合使用会出现的问题
- Android 使用MaterialDesign Android Library会出现的问题
- ExpandableListView 会出现的问题
- ObjectStream
- t:dataScroller的使用-使用binding的时候会出现的问题
- cvGEMM会出现stack overflow的问题
- Eclipse安装Maven会出现的问题
- 面试中会出现的问题
- Unity3d 动画会出现的小问题
- if 语句会出现的问题
- JSP 初学者会出现的问题
- HasHashMap会出现性能问题的情况
- 升级xcode8会出现的问题
- 【开发经验】Struts常见错误及原因分析
- The value for the useBean class attribute is invalid
- web2.0网站的四大特性简述
- ASP.NET2.0中的数据绑定
- 关于文件操作
- 使用ObjectStream会出现的问题
- JavaScript 是什麽?
- 清理了一下blog
- SQL安装被挂起的修复
- spring、struts2、easyjweb等开源框架
- 本文主要包括ISO8583包简介和源代码
- Freetextbox的使用
- ASP Session 对象
- Linux下配置java tomcat