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 constructor
at 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)