Java序列化

作者: 一亩水塘 | 来源:发表于2017-11-01 22:42 被阅读9次

01.序列化

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

02.实现

  • Employee
public class Employee implements Serializable{
    private String name;
    private String address;
    private String telephone;
    private int age;
    private String Email;
}
  • serializeObject
private static void serializeObject(Object object) {
        if (object == null) {
            throw new IllegalArgumentException("object can't be null");
        }
        if (!(object instanceof Serializable)) {
            throw new IllegalArgumentException("object must be Serializable");
        }
        try {
            FileOutputStream fileOutputStream = new FileOutputStream("/Users/wangning/DeskTop/employee.ser");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(object);
            objectOutputStream.close();
            fileOutputStream.close();
            System.out.println("序列化已完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • deserializeObject
private static void deserializeObject() {
        Employee employee = null;
        try {
            FileInputStream fileInputStream = new FileInputStream("/Users/wangning/DeskTop/employee.ser");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            employee = (Employee) objectInputStream.readObject();
            objectInputStream.close();
            fileInputStream.close();
        } catch (ClassNotFoundException | IOException e) {
            System.out.println("Employee class not found");
            e.printStackTrace();
        }
        if (employee != null) {
            System.out.println(employee.getName());
            System.out.println(employee.getAddress());
            System.out.println(employee.getTelephone());
        }
    }
  • Employee序列化结果


    code.png

03.深入

  • a.关于serialVersionUID
/**
 * 建议我们显示设置serialVersionUID。因为如果不声明,JVM会自动为我们产生一个值,单这个值和编译器的实现相关,并不稳定。
 * 这样就可能在不同JVM环境下出现反序列化时报InvalidClassException异常。
 */
    private static final long serialVersionUID = 5948291669509729179L;

相关文章

  • Java-序列化-反序列化

    Thanks Java基础学习总结——Java对象的序列化和反序列化java序列化反序列化原理Java 序列化的高...

  • java序列化那些事儿

    java序列化作用 在说java序列化的作用之前,先说下什么是java序列化吧。java序列化是指把java对象转...

  • Java序列化

    Java序列化的几种方式以及序列化的作用 Java基础学习总结——Java对象的序列化和反序列化

  • Java序列化机制

    Java序列化机制 序列化和反序列化 Java序列化是Java内建的数据(对象)持久化机制,通过序列化可以将运行时...

  • Java 序列化 之 单例模式

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • java 序列化 原理解析

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • 认识Java序列化

    我的个人博客,认识Java序列化 引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java ...

  • JDK 序列化

    序列化和分序列化概念 什么是序列化和反序列化 Java序列化是指把Java对象转换为字节序列的过程,而Java反序...

  • Spark序列化

    Java序列化 有关Java对象的序列化和反序列化也算是Java基础的一部分,首先对Java序列化的机制和原理进行...

  • Serializable中为什么要设置UID

    1、什么是Java序列化与反序列化 Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指...

网友评论

    本文标题:Java序列化

    本文链接:https://www.haomeiwen.com/subject/issnpxtx.html