在主类中添加Serializale接口,可以实现对整个类进行实例化和反实例化,可以,当你只想实例化和反实例化部分成员属性时,又该怎么办呢?
下面介绍三种实现的方式:
- 使用transient关键字修饰
- 使用static关键字修饰
- 自己实现writeObject和readObject方法
- 使用transient关键字修饰
修改实体类,将实体类中不想被实例化和反实例化的属性使用transient修饰
public class Express implements Serializable {
private String expressID;
private String company;
private transient String pickupCode;
运行结果:
在实体类Express中的pickCode添加transient修饰,该类在被实例化和反实例化的时候会忽略该属性。
-
使用static关键字修饰
static修饰的属性也不会参与序列化和反序列化,所以只需在不需要实例化的属性上使用static关键字进行修饰即可。 -
自己实现writeObject和readObject方法,在实现这两个方法的时候需要注意方法的返回值必须是void类型,并且必须是私有的方法,方法才会生效。
private void writeObject(ObjectOutputStream objOut) throws IOException {
objOut.writeObject(expressID);
objOut.writeObject(company);
}
private void readObject(ObjectInputStream objIn) throws IOException, ClassNotFoundException {
expressID = (String) objIn.readObject();
company = (String) objIn.readObject();
}
这两个方法只对Express对象中的expressID和company两个属性进行了序列化和反序列化,所以最后也忽略了pickupCode属性的序列化和反序列化
以上就是我介绍的实现部分属性序列化和反序列化的办法。