美文网首页
Serializable与Externalizable详解

Serializable与Externalizable详解

作者: jsjack_wang | 来源:发表于2018-01-10 00:03 被阅读0次
    1. Serializable自动序列化
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class Person implements Serializable {
        private int age;
        private String username;
    }
    
    public static void main(String[] args) throws Exception {
        // Person已经实现序列化接口 Serializable
        Person person = new Person();
        person.setAge(18);
        person.setUsername("tom");
    
        File targetFile = new File("/Users/jack/Java/JavaDemo/temp.txt");
    
        // 序列化person对象到temp.txt中
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(targetFile));
        objectOutputStream.writeObject(person);
        objectOutputStream.flush();
        objectOutputStream.close();
    
        // 反序列化person对象
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(targetFile));
        Person newPerson = (Person) objectInputStream.readObject();
        objectInputStream.close();
        System.out.println(newPerson);
    }
    程序打印结果:Person(age=18, username=tom
    
    2. Externalizable手动序列化(选择你想要序列化的属性)
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class OtherPerson implements Externalizable {
    
        private int age;
        private String username;
    
        public void writeExternal(ObjectOutput out) throws IOException {
            out.writeInt(age);
            out.writeObject(username);
        }
    
        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
            this.age = in.readInt();
            this.username = (String) in.readObject();
        }
    }
    
    public static void main(String[] args) throws Exception {
        // OtherPerson已经实现序列化接口Externalizable
        OtherPerson person = new OtherPerson();
        person.setAge(18);
        person.setUsername("tom");
    
        File targetFile = new File("/Users/jack/Java/JavaDemo/temp2.txt");
    
        // 序列化OtherPerson对象到temp2.txt中
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(targetFile));
        objectOutputStream.writeObject(person);
        objectOutputStream.flush();
        objectOutputStream.close();
    
        // 反序列化OtherPerson对象
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(targetFile));
        OtherPerson newPerson = (OtherPerson) objectInputStream.readObject();
        objectInputStream.close();
        System.out.println(newPerson);
    }
    输出结果:OtherPerson(age=18, username=tom)

    相关文章

      网友评论

          本文标题:Serializable与Externalizable详解

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