我正在阅读 有效Java中的 序列化一章。
谁调用readObject()和writeObject()?为什么将这些方法声明为私有?
下面是书中的一段代码
// StringList with a reasonable custom serialized form
public final class StringList implements Serializable {
private transient int size = 0;
private transient Entry head = null;
//Other code
private void writeObject(ObjectOutputStream s)
throws IOException {
s.defaultWriteObject();
s.writeInt(size);
// Write out all elements in the proper order.
for (Entry e = head; e != null; e = e.next)
s.writeObject(e.data);
}
}
}
是否有任何特定原因将变量size
声明为瞬时变量,然后在writeObject方法中将其显式写入?如果未声明为瞬态,则无论如何都应该编写它,对吗?
(1)方法未在任何类或接口中声明。一个实现Serializable
接口并需要
在序列化和反序列化过程中进行特殊特殊处理的类必须实现
这些方法,而序列化器/反序列化器将尝试 反映 这些方法。
这是Java中实际上是在javaDoc中定义API的一个相当奇怪的角落…但是, 如果 方法是在接口中定义的,那么它们 就
必须是public
(我们无法实现接口方法的锁定)通过添加private
修饰符)。
为什么私有 -javaDoc没有给出提示。也许将它们 指定 为私有的,因为除了实现者之外,没有其他类打算使用它们。 根据定义, 它们是
私有的 。
(2)的例子只显示 了如何
特殊处理工作。在此示例中,size
是瞬态的,不会被序列化。但是现在我们引入了特殊的处理程序,该处理程序将的值添加size
到流中。与非瞬态字段的常规方法的区别可能是结果流中元素的顺序(如果重要的话…)。
如果在超类中定义了瞬态字段,而子类想要对值进行序列化,则该示例可能有意义。
问题内容: 为什么Java有瞬态字段? 问题答案: 在中关键字用于指示字段不应该是系列化的一部分(这意味着保存,像一个文件)的过程。 从Java语言规范,Java SE 7中版,第8.3.1.3节。transient领域: 可以标记变量transient以指示它们不是对象持久状态的一部分。 例如,你可能具有从其他字段派生的字段,并且仅应以编程方式进行操作,而不要通过序列化来保持状态。 这是一个包含
本文向大家介绍GC是什么? 为什么要有GC?相关面试题,主要包含被问及GC是什么? 为什么要有GC?时的应答技巧和注意事项,需要的朋友参考一下 答 GC(Garbage Collection) GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: 当程序需要更多的堆空间时,GC需要进行垃圾清理工作,暂停所有线程,找出所有无被引用的对象,进
AWS VPC配置有4种场景。但让我们看看这两个: 场景1:1个公共子网。 场景2:1个公共子网和1个私有子网。 由于在公有子网中启动的任何实例都没有 EIP (除非已分配),因此它已无法从 Internet 寻址。然后: 为什么需要私有子网? 私有子网和公共子网到底有什么区别?
Bootstrapping(引导) 是 Netty 中配置程序的过程,当你需要连接客户端或服务器绑定指定端口时需要使用 Bootstrapping。 如前面所述,Bootstrapping 有两种类型,一种是用于客户端的Bootstrap,一种是用于服务端的ServerBootstrap。不管程序使用哪种协议,无论是创建一个客户端还是服务器都需要使用“引导”。 面向连接 vs. 无连接 请记住,这
问题内容: 瞬态关键字将用于防止特定变量的序列化。但是为什么我们不应该序列化数据呢?有内部安全感吗? 问题答案: 有些类本质上是不可序列化的,因为它们表示Manage Java环境之外的资源。例如,a 不能真正序列化,因为它表示一个打开的文件句柄。对于a同样如此:您无法保存和恢复“打开的套接字”。 如果要序列化具有该类型字段的对象,则必须将这些字段标记为瞬态。 使用的另一个原因是您的类进行某种内部
问题内容: 我是Java的新手,并且正在学习封装,并看到了一个示例,其中实例变量在类中声明为私有。 http://www.tutorialspoint.com/java/java_encapsulation.htm 我有2个查询: 为什么实例变量是私有的?为什么不公开? 如果实例变量被公开并直接访问怎么办?我们看到约束了吗? 您能用一个例子说明在Java类中将实例变量声明为public时会出现什么