Java对象序列化给分布式计算带来的方便 (转)
来源:互联网 发布:mysql分页高效 编辑:程序博客网 时间:2024/06/10 22:01
在面向对象程序语言中做分布式计算的时候,经常需要将对象在不同的主机之间传输,我这次在实现分布式计算的时候,需要将一个计算对象从中央服务器Server分发给所有的客户端client。
通过网络TCP,建立Socket,传输一个对象,就需要将对象转换成一段字节流,也就叫做对象的序列化。同时,也要求可以从这段字节流,创建出对应的对象出来。
C++里面的做法就是在每个类里面实现两个接口函数,自己通过写读和写对象的方法,来实现序列化。因为每个类的成员变量的值和成员变量的类型作者自己肯定晓得,所以就需要自己来通过把一个个成员变量写到流里面,最终实现了对象到字节流的转换。
C++里面针对纯数据类型的结构体,就是成员变量没有指针的对象的话,还可以通过拷贝内存块到字节流的方法memcpy,也可以很容易实现序列化,但是这只能是针对成员变量都是数据类型,没有指针类型的对象。
在Java里面就比较方便了,直接通过实现java.io.Serializable接口,JVM就能自动来将类实现序列化。同时,java.io.Serializable接口没有任何接口函数,只是一个空接口,唯一的作用就是标志一下这个类是可以序列化。
其实,Java里面的对象序列化,是JVM在做的,因为JVM可以掌控整个对象的内部数据结构,就可以简单遍历树的方法,来实现把一个对象的所有成员变量写到字节流里面。当然,居然怎么做的,我也不太清楚,但是所有JVM来说,要做这一点还是很容易的。
Java里面,几乎所有的类只要实现了java.io.Serializable接口,就可以实现序列化。但是要求这个类里面的所有成员变量也是可以序列化的。比如类A有个成员变量对象是类B,如果A能序列化,要求B也要能够序列化,也就是A实现了java.io.Serializable,要求B也一定实现java.io.Serializable。
网上关于具体实现序列化的Sample代码很多了,我这里只是贴出一段参考:
序列化对象都是通过Java的ObjectInputStream和ObjectOutputStream来实现的。
写:
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(A);
oos.writeObject(A);
ObjectInputStream ios =new ObjectInputStream(is);
A a=(A)ios.readObject();
A a=(A)ios.readObject();
- Java对象序列化给分布式计算带来的方便
- Java对象序列化给分布式计算带来的方便
- Java对象序列化给分布式计算带来的方便 (转)
- 分布式云数据中心的建设与管理--云计算给数据中心带来的变革和好处
- 企号网给企业带来方便
- 云计算给gis带来的机遇
- 云计算给IT产业结构带来的影响
- 计算模型给多线程编程带来的影响
- 云计算给IT产业结构带来的影响 .
- 云计算给传统行业信息化变革带来的思考
- 另辟蹊径:云计算给企业带来的4个好处
- 网上搜的,感觉挺好,希望能给和我一样的初学者带来方便
- QQ的源起给人们带来了很大的方便
- JAVA的对象序列化
- JAVA的对象序列化
- java的对象序列化
- Java对象的序列化
- Java 的对象序列化
- IT思考——从SOA的定义说起
- Hibernate参考文档 3.0.4
- 躲开QQ的本地密码验证
- gameloft的笔试
- 在可执行jar中动态载入第三方jar(转贴)
- Java对象序列化给分布式计算带来的方便 (转)
- 增加KVM中的系统调用API(转)
- 深入了解C语言(局部变量的定义)(转)
- 深入了解C语言(函数的参数传递和函数使用参数的方法)(转)
- 嵌入式操作系统课程作业之Write OS (转)
- Java学习笔记之SWING -- 基本SWING程序(多层次地图的一个重要实现)
- Java的Build工具—Ant应用指南(1)
- 通用数据压缩算法简介(转)
- gameloft一道笔试题