序列化

来源:互联网 发布:js控制div旋转 编辑:程序博客网 时间:2024/06/05 11:45

一、序列化


对象的序列化:把Java对象转化为字节序列并存储至一个储存媒介的过程。

二、反序列化


把字节序列恢复为Java对象的过程。

三 、对象序列化设计的三个关键点:Java对象, 字节序列,存储。


1)Java对象的组成?
Java对象包含变量与方法,但是序列与反序列仅处理数据,就相当于仅仅处理变量而不会处理方法 。
2)什么是字符序列?
字符序列是两个词。字符是单位。序列是被拍成一列的对象。
3)存储
字符序列需要保存到一个地方,可以是硬盘也可以是内存。序列化就是吧当前对象信息保存下来,反序列化正好相反。

四、Java对象和Java对象序列化的区别?


Java对象存在的前提是必须在jvm运行期间存在。如果想在jvm非运行情况下或者在其他机器jvm上获取指定的Java对象。必须事先序列化才可以。因为序列化是把对象保存到存储媒介中。所以才可以取到。

五、在序列化时,发生了什么?


在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:

java 代码
Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);

当 通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。

java 代码
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);

六、serialization主要用来支持2种主要的特性:


1)、RMI(Remote method invocation)。RMI允许象在本机上一样操作远程机器上的对象。当发送消息给
远程对象和调用远程方法时,就需要用到serializaiton机制来发送参数和接收返回值。
2)、保存信息。在某个时候把状态信息保存起来,以便以后某个时候能恢复这些状态信息。

Hibernaet和EJB中的实体Bean就用到了上面两个特性。
另外:保存的时候不仅能保存对象的副本,而且还会把对象里面所引用的对象也保存起来,以此类推。
就像在编译某个类一样,会涉及到所用到的所有类。但是所引用的对象也必须是可序列化的,不然会抛
NotSerializableException异常。

七、序列化接口的id有什么用?


对象经常要通过IO进行传送,让你写程序传递对象,sun公司提出了一个解决方案:它会把对象
变成某种格式进行输入输出。我们的某个类要想实现能被sun这样处理,必须实现serializable接口。

那么 id有什么用呢?比如我两年前保存了某个类的一个对象,这两年来我不断的修改这个类,删除了某
个属性和增加了一个属性。两年后,我又去读取那个保存的对象,那么此时jdk就会不知道。一个方法就
是在类中增加一个版本号,每次对类的属性进行修改之后升级对应的版本号。这样,在读取的时候,比较
存储对象时的版本号与当前类的版本号。如果不一致,则报版本号不同的错。



原创粉丝点击