美文网首页
Java 序列化与反序列化

Java 序列化与反序列化

作者: 空城EN | 来源:发表于2018-04-10 23:27 被阅读0次

菜鸟的成长之路

含义

序列化:将指定的对象写到文件的过程

反序列化:将文件读出来的过程

前提

1.实现Serializable接口,否则会报错,如下图

错误信息
public class User  implements Serializable{
    private int age;

    private String name;

    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

2.将对象写入到文件中

    /**
     * 将Object序列化到文件中
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        File f = new File("2.txt");
        if(! f.exists()){
            System.out.println(f.createNewFile());
        }
        FileOutputStream fos = new FileOutputStream(f);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new User(12,"ame"));
        oos.flush();
        oos.close();
    }

3.将文件读出来

/**
     * 将 文件 反序列化到Object中
     * @throws IOException
     * @throws ClassNotFoundException
     */
    @Test
    public void test1() throws IOException, ClassNotFoundException{
        File f = new File("2.txt");
        if(f.exists()){
            FileInputStream fis = new FileInputStream(f);
            ObjectInputStream ois = new ObjectInputStream(fis);
            User user = (User)ois.readObject();
            System.out.println(user);
        }
    }

注意点

1.必须实现Serializable接口,序列化类中包含的类也要实现这个接口

2.如果类在序列化后发生变化,反序列化会出现问题,可以指定一个serialVersionUID


注释:serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID这个数字是JVM(JAVA虚拟界)通过一个类的类名、成员、包名、工程名算出的一个数字。而这时候序列化文件中记录的serialVersionUID与项目中的不一致,即找不到对应的类来反序列化。 这时可以指定一个serialVersionUID

3.当你不想要某些字段序列化时候,可以用transient关键字修饰

注:本文借鉴https://www.cnblogs.com/fnz0/p/5410856.html

相关文章

  • Java序列化与反序列化

    问题 Java序列化与反序列化是什么?为什么需要序列化与反序列化?有什么好处?如何实现Java序列化与反序列化? ...

  • 《成神之路-基础篇》Java基础知识——序列化(已完结)

    Java对象的序列化与反序列化 介绍了序列化与反序列化的基本用法 深入分析Java的序列化与反序列化 介绍了wri...

  • java专题之序列化

    一、基本概念 1、什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反...

  • urldns利用链分析

    java序列化与反序列化 java 序列化与反序列化 为了更好的存放传输一些数据,往往会将一些数据进行序列化,需 ...

  • Java序列化与Hessian序列化的区别

    Java序列化与Hessian序列化的区别

  • 2022-07-12

    什么是序列化与反序列化 Java 序列化是指把 Java 对象转换为字节序列的过程。 Java 反序列化是指把字节...

  • Java-序列化-反序列化

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

  • 序列化与反序列化1

    一、什么是序列化与反系列化? 序列化是将对象转换为二进制形式的数据(如Java中的byte数组),反序列化是再将二...

  • Serializable中为什么要设置UID

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

  • Protobuf的序列化与反序列化

    Protobuf的序列化与反序列化 proto.proto文件内容 Java 实现 序列化 反序列化 GO 实现 ...

网友评论

      本文标题:Java 序列化与反序列化

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