Serialization


title: Serialization
date: 2018-03-26 15:18:26
tags: [JAVA,Read]
categories: other

概述

程序运行时,变量的内容之存在于内存。
比如定义一个int
int i = 65535
这里提出一个概念——“serialization”,在python中成为pickling(序列化)这一个过程实际上是把内存中的数据变成可存储的数据,一般是指将讲数据写入磁盘。
在JAVA中,如果JVM停止后,在内存中的对象必然消失,所以需要通过序列化这一过程,持久化内存中的对象——也就是保持对象。
使用JAVA对象序列化时,会把其状态保存为一组字节,在未来将这些字节组装成对象。

示例

实际上,JDK提供了一个接口java.io.Serializable,通过这个接口,一个类可以被序列化。

public class Person implements Serializable {  

private String name = null;  

private Integer age = null;  

private Gender gender = null;  

public Person() {  
    System.out.println("none-arg constructor");  
}  

public Person(String name, Integer age, Gender gender) {  
    System.out.println("arg constructor");  
    this.name = name;  
    this.age = age;  
    this.gender = gender;  
}  

public String getName() {  
    return name;  
}  

public void setName(String name) {  
    this.name = name;  
}  

public Integer getAge() {  
    return age;  
}  

public void setAge(Integer age) {  
    this.age = age;  
}  

public Gender getGender() {  
    return gender;  
}  

public void setGender(Gender gender) {  
    this.gender = gender;  
} 

@Override 
public String toString() {  
    return "[" + name + ", " + age + ", " + gender + "]";  
}  
}   

public class SimpleSerial {  

public static void main(String[] args) throws Exception {  
    File file = new File("person.out");  

    ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(file));  
    Person person = new Person("John", 101, Gender.MALE);  
    oout.writeObject(person);  
    oout.close();  

    ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));  
    Object newPerson = oin.readObject(); // 没有强制转换到Person类型  
    oin.close();  
    System.out.println(newPerson);  
}  
} 

上述代码实现了序列化和反序列化的过程,输出一个对象内容到一个文件,再读取这个文件中的内容并打印。
如果不实现Serializable,则会抛出异常NotSerializableException.

原文地址:https://www.cnblogs.com/zhoujiayong/p/10144461.html