取消序列化
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方法,省略了
}