项目第二阶段,管理客户端和管理服务器。架构C/S,技术RMI
今天上午做了一个简单的测试系统,用来测试前两天所编写的构件:写了一远程服务器,一个命令行客户端。OK,编译时也没出错。
然而运行起来,可怕的事情发生了:先前写的实体类无法传送给客户端。程序抛出了异常。仔细观察,发现是产生了对象无法序列化的IO异常。
RMI底层通过TCP协议进行通讯,ObjectInputStream和ObjectOutputStream来负责对象的输入和输出。实在是不明白,以前做RMI系统实验的时候,根本没遇到这种序列化异常:传String就传String,传Vector就传Vector。
猜想应该是我写的那些类无法序列化的缘故。参考了API文档,发现这个东西:MarshalledObject,可以对其构造方法的对象进行序列化(说穿了就是变成字节流)。
迅速改造了测试程序,OK,能穿对象了。但是.....序列化以后无法反序列化!天,类对象实例全部变成了组毫无意义的字节数组。
应该有其他的办法,SUN的Java文档实在不能和MSDN相比,太过于简单啦。
经过3个小时的资料查阅和测试,终于找到了种正确而且异常简单的方法:对先前的代码进行简单的重构:让他们统统实现java.io.Serializable接口。只改一行代码,全部解决!
^_^
posted on 2006-07-24 14:44
murainwood 阅读(269)
评论(0) 编辑 收藏 所属分类:
Java读书笔记