java中transient和序列化

1、transient使用场景

众所周知,一个对象如果实现了Serializable接口,那么这个对象就可以被序列化,总之只要这个类实现了Serializable接口,那么这个类的所有属性和方法都会自动序列化。

然而在实际开发过程中,类中有的属性不需要序列化,如密码,银行卡号等敏感信息,为了安全起见,不希望在网络传输中被传输,如果在对应的变量前加上transient关键字,这个变量就不会被序列化以及反序列化。也就是说,这个变量的生命周期仅存于调用者的内存中而不会写入磁盘并持久化。

2、transient使用小结

transient关键字修饰的变量不再是对象持久化中的一部分,该变量也无法被反序列化;

transient关键字只能修饰变量,不能修饰类和方法,该变量如果是用户自定义类变量,该类必须实现Serializable接口;

除了transient关键字修饰的变量不能被序列化,static修饰的变量(即静态变量),不管是否被transient修饰,均不能被序列化。

3、transient使用注意事项

java对象的序列化可以通过实现两种接口来实现,分别是Serializable和Externalizable,不同在于实现Serializable后,所有的序列化是自动进行的;而实现Externalizable后,所有内容都不是自动序列化的,需要在writeExternal方法中手动指定需要序列化的变量,这是就与是否transient修饰无关。

4、简述序列化

序列化是为了保存内存中各种对象的状态,并且可以把保存的对象状态读取出来。也可以说是把结构化的对象变成无结构的字节流,方便存储和传输,在这里序列化很好的提供了这种机制。

5、序列化场景

当你想把内存中的对象保存在一个文件中或者数据库的时候;

当你想用套接字(socket)在网络上传送对象的时候;

当你想通过RMI传输对象的时候;

6、序列化注意事项

当一个父类实现了序列化,子类自动实现序列化,而不需要显式实现Serializable接口;

当一个对象的实例变量引用其他对象,序列化该对象时也会把引用对象进行序列化;

并非所有的对象都可以序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值