Java对象序列化给分布式计算带来的方便

转载 2007年09月24日 16:15:00
在面向对象程序语言中做分布式计算的时候,经常需要将对象在不同的主机之间传输,我这次在实现分布式计算的时候,需要将一个计算对象从中央服务器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);
       读:
 
ObjectInputStream ios =new ObjectInputStream(is);
A a
=(A)ios.readObject();
 

相关文章推荐

ElasticSearch学习_陶文3_时间序列数据库的秘密(3)——加载和分布式计算

加载 如何利用索引和主存储,是一种两难的选择。 选择不使用索引,只使用主存储:除非查询的字段就是主存储的排序字段,否则就需要顺序扫描整个主存储。 选择使用索引,然后用找到的row id去主存储加...

java对象的序列化

Java对象序列化的秘密.pdf

  • 2013-04-18 15:15
  • 2.85MB
  • 下载

java序列化之后,对象的引用关系?

今天写代码的时候用到序列化,不过突然想到这个问题。 于是写了一些测试代码,得出两个结论。 如果两个对象存在引用关系,比如A引用B。 如果两个对象是各自序列化的,则引用关系不再存在。 如果两个对象是是...

JAVA_对象序列化

  • 2012-08-16 13:02
  • 51KB
  • 下载

java基础 对象序列化

  • 2011-11-21 08:59
  • 304KB
  • 下载

Java对象序列化

对象序列化的作用使对象具有持久化的机制,用例子的方式来讲解了机制对象序列化的方式
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)