您的位置:首页 > 编程语言 > Java开发

一天一个Java基础——序列化

2016-04-04 14:10 651 查看

1.概念

  Java的“对象序列化”能将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象的时候,能把这些byte数据恢复出来,并据此重新构建那个对象。

  对象序列化能实现“轻量级persistence(lightweight persistence)”。所谓persistence,是指对象的生命周期不是由程序是否运行决定的,在程序的两次调用之间对象仍然还活着。通过“将做过序列化处理的对象写入磁盘,等到程序再次运行的时候再把它读出来”,可以达到persistence的效果。

  之所以要在语言里加入对象序列化,是因为要用它来实现两个重要的功能:

    1.Java的远程方法调用能像调用自己机器上的对象那样去调用其它机器上的对象。

    2.对JavaBean来说,Bean的状态信息通常是在设计时配置的,这些状态信息必须保存起来,供程序启动的时候用,对象序列化就负责这个工作。

  对象序列化不仅能保存对象的副本,而且还会跟着对象中的reference把它所引用的对象也保存起来,然后再继续跟踪那些对象的reference。

2.实现序列化

  (1)序列化一个对象只要让它实现Serializable接口就行了(这是一个“标记接口”,tagging interface,没有任何方法)。

  (2)要想序列化对象,必须先创建一个OutputStream,然后把它嵌进ObjectOutputStream。这是就能用writeObject()方法把对象写入OutputStream。

  (3)读的时候需要把InputStream嵌到ObjectInputStream中,然后再调用readObject()方法。

3.样例

package Entity;

import java.io.Serializable;

public class Department implements Serializable{
private static final long serialVersionUID = -6913084898834515327L;

public int id;
public String name;

public String toString() {
return "Department [id=" + id + ", name=" + name + "]";
}

}


Department.java

package Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import Entity.Department;
import Entity.Employee;

public class test1 {

/**
* 序列化对象
*/
@org.junit.Test
public void SerializeDemo() {
Employee e = new Employee();
e.name = "Reyan Ali";
e.address = "Phokka Kuan, Ambehta Peer";
e.SSN = 11122333;
e.number = 101;
Department d = new Department();
d.id = 1;
d.name = "Java研发";
e.department = d;
try {
System.out.println(e);
FileOutputStream fileOut = new FileOutputStream(new File("/Users/zhengbinMac/employee.txt"));
ObjectOutputStream out = new ObjectOutputStream(fileOut);
System.out.println(e);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in /Users/zhengbinMac/employee.txt");
} catch (IOException i) {
i.printStackTrace();
}
}

/**
* 反序列化对象
*/
@org.junit.Test
public void DeserializeDemo() {
Employee e = null;
try {
FileInputStream fileIn = new FileInputStream("/Users/zhengbinMac/employee.txt");
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();
} catch (IOException i) {
i.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println("Employee class not found");
c.printStackTrace();
return;
}
System.out.println("Deserialized Employee...");
System.out.println("Name: " + e.name);
System.out.println("Address: " + e.address);
System.out.println("SSN: " + e.SSN);
System.out.println("Number: " + e.number);
System.out.println("Department: " + e.department);
}
}


相关博文:

http://www.cnblogs.com/lanxuezaipiao/p/3369962.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: