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 + '}'; } }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报