序列化与反序列化 实现序列化的方式

方式一:  implements Serializable 这个比较常用, 对于我们想要保护的某些属性使用transient修饰。

这样的话我们就不能把这个属性值写入磁盘了,保存对象使用ObjectOutputStream 的writeObject(obj) 方法;

读取就是翻过啦,使用输入流ObjectInputStream的 readObject

方式二: implements Externalizable

说一下Externalizable接口 ,Externalizable接口继承了Serializable,

但是有提供了两个方法

public void writeExternal(ObjectOutput out) throws IOException {}和

public void readExternal(ObjectInput in) throws IOException,
   ClassNotFoundException {}

先说一下实现Externalizable接口的类,它默认对象的属性值时transient (瞬时)的不会被序列化

但是使用上边的两个方法可以让我们自由的去实现我们想要的序列化属性,

比如我有一个属性String  name 想序列化

public void writeExternal(ObjectOutput out) throws IOException {

     out.writeObject(name);

}

public void readExternal(ObjectInput in) throws IOException,
   ClassNotFoundException {

    String str =  (String)in.readObject();

}

我们必须在这两个方法里分别write 和read 不然 在我们序列化和反序列化中就会出现异常

 

 implements Externalizable 实现序列化有点麻烦,但是我们可以很好的控制我们需要实现序列化的地方。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值