zoukankan      html  css  js  c++  java
  • Serializable 序列化为文件

    package test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    public class Run {
    
        public static void main(String[] args) throws Exception {
    
            String personName = "Xiaoming";
            String fileName = "person_file";
    
            Person person = new Person();
            person.setName(personName);
    
            se2File(person, fileName); // here1
            // deFromFile(fileName); // here2
        }
    
        public static void se2File(Person person, String fileName)
                throws FileNotFoundException, IOException {
            System.out.println(new File(fileName).exists());
            ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
                    fileName));
            oo.writeObject(person);
            oo.close();
            System.out.println("serialized.");
            System.out.println(new File(fileName).exists());
        }
    
        public static void deFromFile(String fileName)
                throws FileNotFoundException, IOException, ClassNotFoundException {
            ObjectInputStream oi = new ObjectInputStream(new FileInputStream(
                    fileName));
            Person person = (Person) oi.readObject();
            oi.close();
            System.out.println("deserialized.");
            System.out.println("Hi, " + person.getName());
        }
    }
    
    class Person implements Serializable {
    
        // private static final long serialVersionUID = 1L; //here4
        private String name;
    
        // private int age; // here3
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    第一步:只保留here1 ,运行。

    false
    serialized.
    true

    第二步:只保留here2 ,运行。

    deserialized.
    Hi, Xiaoming

    第三步:只保留here2、here3 ,运行。

    Exception in thread "main" java.io.InvalidClassException: test.Person; local class incompatible: stream classdesc serialVersionUID = -4720721859021305407, local class serialVersionUID = -6592546504901093862
        at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at test.Run.deFromFile(Run.java:41)
        at test.Run.main(Run.java:23)

    第4步:只保留here1(here4 ),运行。

    true
    serialized.
    true

    第5步:只保留here2(here4 ),运行。

    deserialized.
    Hi, Xiaoming

    第6步:只保留here2、here3(here4 ),运行。

    deserialized.
    Hi, Xiaoming
  • 相关阅读:
    spring cloud 学习过程中遇到的问题
    android学习第二天遇到的问题
    android studio 安装与使用第一天
    面试记录2
    谈谈找工作和面试正常的环节
    面试记录1
    重生
    虚拟机ubuntu 登录密码忘记解决办法
    自动化的基于TypeScript的HTML5游戏开发
    借助AMD来解决HTML5游戏开发中的痛点
  • 原文地址:https://www.cnblogs.com/zno2/p/4699974.html
Copyright © 2011-2022 走看看