美文网首页
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 序列化与反序列化

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