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
  • 相关阅读:
    c# 指针unsafe/fixed -- 【一】
    Windows消息大全(转)
    Windows消息过滤
    C#预编译
    c#摄像头编程实例 (转)
    多线程按顺序执行 (转)
    定位程序集
    无需写try/catch,也能正常处理异常 (转)
    无需Try catch 的UI事件封装类
    注册表修改安全策略
  • 原文地址:https://www.cnblogs.com/zno2/p/4699974.html
Copyright © 2011-2022 走看看