class A extends Serializable{
public A(){}
int x=0;
private final transient ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
}
关于反序列化的几个问题: 1)为什么案例序列化时需要提供默认构造函数? 2) 为什么反序列化后字段“lock”没有被初始化?
编辑:忘记在我原来的帖子中添加“ transient ”。现在添加它。
最佳答案
- 不需要
锁被初始化,下面的代码确实打印了初始化的锁(只需将
B
的对象写入字节数组并从中读取)public class B implements Serializable { private int x = 0; private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); public static void main(String[] args) throws IOException, ClassNotFoundException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try (ObjectOutput out = new ObjectOutputStream(bos)) { out.writeObject(new B()); } catch (IOException e) { e.printStackTrace(); throw e; } byte[] bytes = bos.toByteArray(); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); try (ObjectInput in = new ObjectInputStream(bis)) { B b = (B) in.readObject(); System.out.println(b.lock); } catch (IOException e) { e.printStackTrace(); throw e; } } } }
关于java - java中反序列化步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208552/