序列化概念:java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据,有关对象的类型的信息和存储在对象中数据的类型。
反序列化概念:把字节恢复为对象的过程叫反序列化。
类ObjectInputStream和ObjectOutputStream包含了序列化和反序列化对象的方法。
一个类要想序列化成功,必须满足两个条件:
该类必须实现java.io.SeriaAlizable;
该类的所有属性必须是可序列化的,如果一个属性不是可序列化的,则该属性必须注明是短暂的。
示例:
SerializeDemo.java文件:用ObjectOnputStream实现序列化
import java.io.*; public class SerializerDemo { public static void main(String [] args) { Employee e = new Employee(); e.name = "Ali"; e.address = "yi"; e.SSN = 123456; e.number = 11545; try { //文件输出流(FileOutputStream):FileOutputStream用于写入原始字节流,如图像数据。当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名 FileOutputStream fileOut = new FileOutputStream("C:/Users/July/Desktop/test/1.ser"); //ObjectOutputStream 类用来序列化一个对象 ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("成功序列化"); }catch(IOException i) { i.printStackTrace(); } } }
employee.java文件:
import java.io.Serializable; //创建接口 class Employee implements Serializable{ public String name; public String address; public transient int SSN; public int number; }
反序列化:用ObjectInputStream实现反序列化
import java.io.*; public class DeserializeDemo { public static void main(String[] args) throws ClassNotFoundException { Employee e = null; try { FileInputStream fileIn = new FileInputStream("C:/Users/July/Desktop/test/1.ser"); 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("Emplyoee类没有发现"); c.printStackTrace(); } System.out.println("执行。。。。。"); System .out .println("Name:" + e.name ); System .out .println("Address:" + e.address ); System .out .println("SSN:" + e.SSN ); System .out .println("Number:" + e.number ); } }