A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亮   /  2011-7-20 16:31  /  2575 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在远程传递对象时,主机先序列化对象,而客户机反序列化时,先会加载并且初始化对象所属的类(会执行此对象的静态代码块和初始化静态变量),那么这个类来自于哪里,客户端不一定有此类的.class文件啊?是来自与主机吗?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 哥们,是对象序列化,不是类序列化,传的是

查看全部评分

4 个回复

倒序浏览
我认为这样的程序是没法运行的,既然你传输了对象,那么客户端接收时,肯定得有这样的类存在然后用这个类的引用变量去接收,张老师讲到过,双方必须都有约定俗成的语言,就是指双方必须定义相同的类。
[ 本帖最后由 杨志罡 于 2011-07-21  03:21 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-21 15:39:36
藤椅
对不起,可能是我没有表述清楚,但是我确实是说的是序列化和反序列化对象,至于admin所说的“哥们,是对象序列化,不是类序列化,传的是”,可能你理解有偏差。

杨志罡 同学的回答的意思就是说远程的客户端反序列化时,客户端一定要存在此对象的类文件,否则行不通是这样吗?我没法尝试。会尝试的(一台机子能行吗?)

但是,要提醒的是,类文件并不一定要在本地,也可以来自网络,我的理解是,反序列化是加载的类是从主机传来的,当然要尝试。谢谢。
回复 使用道具 举报
黑马网友  发表于 2011-7-23 14:25:13
板凳
上面同学说的对:

我认为这样的程序是没法运行的,既然你传输了对象,那么客户端接收时,肯定得有这样的类存在然后用这个类的引用变量去接收,张老师讲到过,双方必须都有约定俗成的语言,就是指双方必须定义相同的类。

我的理解错误。

使用ftp通信时,核心代码就是:
[code=java]//服务器
ServerSocket serverSocket = new ServerSocket(8000);

Socket socket = serverSocket.accept();


OutputStream oos = socket.getOutputStream();


ObjectOutputStream oos = new ObjectOutputStream(oos);


oos.writeObject(new MyClasss());//MyClasss是自定义的一个类[/code]

[code=java]//客户机
Socket socket = new Socket("loaclhost",8000);
InputStream in = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(in);
Object obj = ois.readObject();[/code]

确实,如果先启动服务器程序,再启动客户端程序(两者都用命令行指定classpath),客户端程序的classpath中无MyClasss的类文件,出现ClassNotException。

所以,“张老师讲到过,双方必须都有约定俗成的语言,就是指双方必须定义相同的类。”确实有道理。要有这个思维啊。

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2 还行!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 16:22:27
报纸
…学习了…,最开始没想到这些问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马