transient关键字的对象是不参与序列化的,TreeSet中保存数据的变量m就是被transient修饰的,理论上是不被序列化的,但为什么反序列化后treeset还会有数据?
2条回答 默认 最新
- libolf 2019-05-17 16:56关注
并不是说有transient关键字修饰的变量就一定不会被序列化,transient是针对系统来说的,此类中如果有自定义readObject和writeObject方法,方法中已经对transient变量作了序列化处理,那么还是可以被序列化的。
下面是例子,若没有read和write方法,那么变量a序列化完后会是0,若有则是序列化的值。static class Bean implements Serializable { private static final long serialVersionUID = 2966031808490167073L; int x = -1, y = -1, z = -1; transient int a = -1; private void writeObject(ObjectOutputStream stream) throws IOException { stream.writeInt(x); stream.writeInt(y); stream.writeInt(z); stream.writeInt(a); } private void readObject(ObjectInputStream inputStream) throws IOException { x = inputStream.readInt(); y = inputStream.readInt(); z = inputStream.readInt(); a = inputStream.readInt(); } @Override public String toString() { return "Bean{" + "x=" + x + ", y=" + y + ", z=" + z + ", a=" + a + '}'; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 python代码,帮调试
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条