流的应用和对象串行化
堵塞
~read()函数是阻塞的,在读到所需的内容之前会停下来等
~使用read()的更"高级"的函数,如nextInt(),readLine()都是这样的
~所以常用单独的线程来做socket读的等待,或使用nio的channel选择机制
~对于socket,可以设置SO时间
setSoTimeout(int timeOut)
对象串行化
~ObjectlnputStream类
~readObject()
~ObjectOutputStream类
~writeObject()
~Serializable接口
串行化
~对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization)
~串行化的主要任务是写出对象实例变量的数值。如果变量是另一对象的引用,则引用的对象也要串行化。这个过程是递归的,串行化可能要涉及一个复杂树结构的串行化,包括原有对象、对象的对象、对象的对象的对象等等。对象所有权的层次结构称为图表(graph)
串行化的目的
~尽量保持对象串行化的简单扼要 ,但要提供一种途径使其可根据开发者的要求进行扩展或定制。
~串行化机制应严格遵守Java的对象模型 。对象的串行化状态中应该存有所有的关于种类的安全特性的信息。
~对象的串行化机制应支持Java的对象持续性。
~对象的串行化机制应有足够的可扩展能力以支持对象的远程方法调用(RMI)。
~对象串行化应允许对象定义自身的格式即其自身的数据流表示形式,可外部化接口来完成这项功能