Java序列化与持久化

Java 序列化

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包含反序列化和序列化对象的方法。
ObjectOutputStream 类包含很多写方法来写各种数据类型,但是一个特别的方法例外:

public final void writeObject(Object x) throws IOException

上面的方法序列化一个对象,并将它发送到输出流。相似的 ObjectInputStream 类包含如下反序列化一个对象的方法:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

该方法从流中取出下一个对象,并将对象反序列化。它的返回值为Object,因此,你需要将它转换成合适的数据类型。

为了演示序列化在Java中是怎样工作的,我将使用之前教程中提到的Employee类,假设我们定义了如下的Employee类,该类实现了Serializable 接口。
Employee.java 文件代码:

public class Employee implements java.io.Serializable{
public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck(){
   System.out.println("Mailing a check to " + name
                           + " " + address);
   }
}

● 科幻片里,有两个常见的场景:场景一、远程传输,一个人站在传输带上,一按按钮, 马上传输到另外一个地方,在远端,自动重新组装成原来的那个人 , 完全无损, 没有一个分子传输失败。人是一个对象, 对象为甚么可以无损传输呢, 因为这个对象可以序列化 。可以把这个对象序列成一个串,到了合适的世界,反序列化后,又可以变回来 。有些对象可以序列化,有些对象无法序列化。
● 所有的java 的基础变量,都可以序列化。有些对象,是和当地的环境相关的,无法序列化。
● 序列化,本质上,就是把对象转化成二进制流, 反序列化,二进制流 回到对象
● 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

Java持久化

● 冷冻技术, 一个人冰冻起来, 解冻后,马上回复冰冻前的所有状态 。可以持久保存的,叫做持久化
● 程序运行后,程序的执行结果,存储成文件,这个过程叫做 持久化
● 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

发布了36 篇原创文章 · 获赞 0 · 访问量 858

猜你喜欢

转载自blog.csdn.net/Z1998hx0919/article/details/105099957