美文网首页
Java入门--序列化与反序列化

Java入门--序列化与反序列化

作者: 王二麻子88 | 来源:发表于2020-11-28 23:47 被阅读0次

    Java入门--序列化与反序列化

    需要实例化的类 需要实现 Serializable 接口 (空接口, 不定义必须实现的方法)

    Serializable 接口对应的Java源码解释public interface Serializable {}

    注意:

    1. static属性不参与序列化。
    2. 对象中的某些属性如果不想被序列化,不能使用static,而是使用transient修饰。
    3. 为了防止读和写的序列化ID不一致,一般指定一个固定的序列化ID。
    package io.github.wangermaizi.day09;
    
    import java.io.*;
    
    public class Serialization  {
        public static void main(String[] args) {
            // 初始化 流
            FileInputStream fis = null;
            ObjectInputStream ois = null;
            ObjectOutputStream oos = null;
            FileOutputStream fos = null;
    
            try {
                Person person = new Person(22, "wang", true);
                String fileStr = "E:/LearnJava/basejava/day06/src/io/github/wangermaizi/day09/b.txt";
                // 序列化
                fos = new FileOutputStream(fileStr);
                // 设置对象流对应的文件流
                oos = new ObjectOutputStream(fos);
                // 写入对象流
                oos.writeObject(person);
    
                // 强制刷新一下
                oos.flush();
    
    
                // 反序列化
                fis = new FileInputStream(fileStr);
                // 通过ObjectInputStream将文件中二进制数据反序列化成Person对象:
                ois = new ObjectInputStream(fis);
                Person p = (Person) ois.readObject();  // 此处需要对类进行强转,  不然会报错
    
                // 输出内容
                System.out.println(p);
    
            } catch (Exception E) {
                E.printStackTrace();
            }
        }
    }
    
    // 序列化反序列化
    class Person implements Serializable {
        // 添加序列化 ID, 重要!!! 决定了他是否能成功反序列化
        // 需要保持读写的一致
        private static final long seriaVersionUID = 1L;
    
        private int age;
        private String name;
        private boolean isMan;
    
        public Person(int age, String name, boolean isMan) {
            this.age = age;
            this.name = name;
            this.isMan = isMan;
        }
    
        // 需要重写 toString方法实现序列化
        @Override
        public String toString() {
            return "Person [age=" + age + ", isMan=" + isMan + ", name=" +name + "]";
        }
    }
    

    相关文章

      网友评论

          本文标题:Java入门--序列化与反序列化

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