transient

取消序列化

transient修饰变量,在进行序列化操作时,会忽略。

被static不能被序列化

读取反序列化的对象里的static里的值是来自jvm的,而非序列化的值。

不一定加了transient,就不会被序列化了

若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。需要自己手动实现序列化/反序列化方法

实现Externalizable接口,进行序列化

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
public class UserBean2 implements Externalizable {

    //串行化版本统一标识符
    private static final long serialVersionUID = 2L;

    private String userName;
    private String password;
    private int age;

    public UserBean2() {
    }

    public UserBean2(String userName, String password, int age) {
        this.userName = userName;
        this.password = password;
        this.age = age;
    }

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(userName);
        out.writeObject(password);
        out.writeInt(age);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        userName = (String) in.readObject();
        password = (String) in.readObject();
        age = in.readInt();
    }

    //一系列的setter和getter方法,省略了

}

参考

Java之Serializable/Externalizable序列化和反序列化

你可能感兴趣的:(transient)