首页 > 其他 > 详细

Serializable 序列化为文件

时间:2016-08-05 19:18:55      阅读:177      评论:0      收藏:0      [点我收藏+]
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

 

Serializable 序列化为文件

原文:http://www.cnblogs.com/zno2/p/4699974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!