Externalizable自己控制序列化的DEMO

来源:互联网 发布:php 记事本打开是乱码 编辑:程序博客网 时间:2024/05/01 19:38

一、首先一个Demo

package com.yezi.extern;import java.io.Externalizable;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectOutput;import java.io.ObjectOutputStream;/**** * 使用Externalizable,来自己完全控制序列化操作 * 序列化会调用空的构造函数,必须要有一个空的构造函数 * */public class TestExternSerializable implements Externalizable{public static void main(String[] args) throws IOException, ClassNotFoundException {File file = new File("src/1.txt");ObjectOutput out = new ObjectOutputStream(new FileOutputStream(file));TestExternSerializable tt = new TestExternSerializable("yezi","G");out.writeObject(tt);ObjectInput in = new ObjectInputStream(new FileInputStream(file));System.out.println(in.readObject());}/*** * 反序列化调用 */public  TestExternSerializable() {System.out.println("zzzzzz");}public TestExternSerializable(String name,String sex){this.name=name;this.sex=sex;}private String name;  //名字private String sex; //性别@Overridepublic void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {System.out.println("read.....");name = (String) in.readObject();sex = (String)in.readObject();}@Overridepublic String toString() {return name+"---"+sex;}@Overridepublic void writeExternal(ObjectOutput out) throws IOException {out.writeObject(name);out.writeObject(sex);System.out.println("write.....");}}

二、简单解析

1、Externalizable的结构关系看API。

2、和Serializable唯一不同的就是必须有个public 的空的构造函数,否则会报错

3、证实使用Externalizable会调用空的构造函数。(Serializable不会)

原创粉丝点击