zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    @ControllerAdvice 全局异常处理
    SpringBoot 单文件和多文件上传
    Springboot application 本地HTTPS配置
    不使用spring-boot-starter-parent进行依赖的版本管理
    构造函数和函数式接口
    函数式接口和Lambda表达式
    使用FunctionalInterface提供工厂方法
    Future 和 CompletableFuture 异步任务 in Java
    单例
    使用私有仓库(Docker Registry 2.0)管理镜像
  • 原文地址:https://www.cnblogs.com/zhoujiayong/p/10144461.html
Copyright © 2011-2022 走看看