/**
- Created by zhouxiliang on 18/2/12.
*/
public class MainUtil {
public static void main(String[] args) throws Exception {
Man man = new Man();
ByteOutputStream byteOutputStream = new ByteOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
objectOutputStream.writeObject(man);
objectOutputStream.flush();
ByteInputStream byteInputStream = new ByteInputStream(byteOutputStream.getBytes(), byteOutputStream.getCount());
ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream);
Man copy = (Man) objectInputStream.readObject();
System.out.println(JSON.toJSONString(copy, true));
}
/**
* 1. serializable 接口 的对象,如果里面的某个 Field 没有 serializable 标识 会怎样
* 2. 如果父类没有标识会怎样
* 3. 如果子类没有标识会怎样
*/
@Data
public static class Person implements Serializable {
private String name;
}
@Data
public static class Student extends Person {
private String number;
private SuperMan freind;
}
@Data
public static class SuperMan implements Serializable {
private String star;
}
/**
* 1. 尝试重写 writeObject 、 readObject
* 执行顺序是从父亲类 到 子类
*/
@Data
public static class Father implements Serializable {
private Long cardNumber;
private String code;
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeUTF("xxdd");
System.out.println("Father.write");
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
code = objectInputStream.readUTF();
System.out.println("father.read");
}
}
@Data
public static class Son extends Father {
private String name;
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
System.out.println("son.write");
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
System.out.println("son.read");
}
}
/**
* 1. 尝试使用 Externalizable 接口,看下是否真的会覆盖父类的 默认序列化,导致父亲字段丢失
*/
@Data
public static class Girl implements Externalizable {
private String hairColor;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
System.out.println("girl.write");
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
System.out.println("girl.read");
}
}
@Data
public static class BeautyGirl extends Girl implements Externalizable {
private String star;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(getHairColor());
out.writeUTF(star);
System.out.println("beauty.write");
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
setHairColor(in.readUTF());
setStar(in.readUTF());
System.out.println("beauty.read");
}
}
/**
* 1. 尝试使用 writeReplace readResolve
*/
@Data
public static class Man implements Serializable {
private String dickLen ;
private Object writeReplace(){
return new Man();
}
private Object readResolve(){
Man man = new Man();
man.setDickLen("3");
return man;
}
}
}
网友评论