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
原文地址:https://www.cnblogs.com/zno2/p/4699974.html