您的位置:首页 > 其它

自定义序列化实现Externalizable接口需要注意的问题

2017-01-17 15:26 288 查看
package com.zhen.demo;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;

public class Person5 implements Externalizable{

private String name;

private int age;

public Person5(){}

public Person5(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(new StringBuffer(name).reverse());
out.writeInt(age);
}

@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.name = ((StringBuffer)in.readObject()).reverse().toString();
this.age = in.readInt();
}

@Override
public String toString() {
return "Person5 [name=" + name + ", age=" + age + "]";
}

}
实现该接口与实现Serializable接口的情况不太一样,需要序列化的类要提供无参构造器,且访问修饰符不能是private和protected和默认的修饰符,只能是public,否则会报错;
Exception in thread "main" java.io.InvalidClassException: com.zhen.demo.Person5; no valid constructorat java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:150)at java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:790)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1782)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)at com.zhen.demo.WriteObject.main(WriteObject.java:44)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: