java 类的序列化和持久化理解

来源:互联网 发布:通甲优博 知乎 编辑:程序博客网 时间:2024/05/18 04:01

什么是序列化?

把Java对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为Java对象的过程称为对象的反序列化。 实现java.io.Serializable接口的类对象可以转换成字节流(序列化)或从字节流恢复(饭序列化),不需要在类中增加任何代码。

序列化 : 把对象转换 为二进制数据(如网络传输,存储数据库等),必须实现序列化接口 (java.io.Serializable).

public class Setting implements Serializable{    private static final long serialVersionUID = -1478999889661796840L;    //略}

serialVersionUID的作用是对持久化对象的序列化的版本控制,控制各版本反序列化时是否兼容。Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。

首先要说的是,Hibernate中ORM里对应的映射文件bean,必须实现序列化.因为bean里的数据需要存入数据库(要转化为二进制保存),进行存取工作.

JAVA类的数据 ,如果要进行相关的存储工作(如写文件,网络传输,写数据库等),那么这个数据的类 就必须实现序列化接口 (java.io.Serializable).

什么是持久化

持久化 : 把对象保存 在介质上(如写文件,读文件不是), 没有接口实现,一般指方法调用.

二、持久化
序列化是能够实现对象的写入和写出,这样在此基础上,持久化就水到渠成了。持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC就是一种持久化机制。文件IO也是一种持久化机制。在一定周期内保持不变就是持久化,持久化是针对时间来说的。持久化就是把内存中的对象保存到外存中,让以后能够取回。而保存和取回的过程就是经过序列化和对象io完成的。
序列化是为了解决对象的传输问题,使对象传输可以在线程之间、进程之间、内存外存之间、主机之间进行。我之所以在这里提到序列化,是因为我们可以利用序列化来辅助持久化。

如果按照存储介质和生命周期的长短划分,所有的数据都以两种形式存在,其中一种是保存于内存中的运行时对象,另一种则是存储于持久化物理介质中的文件,比如数据库文件等。数据的持久化关注于相同的数据在不同形态数据之间的转化,解决的是如何将内存对象持久化存储,以及从物理介质中加载数据并创建内存对象。

数据的持久化是序列化的又一个典型的应用,对象只有在序列化之后才能进行持久化存储,从持久化存储介质加载的数据通过反序列化转变成运行时对象。

0 0
原创粉丝点击