对象流对象克隆浅克隆深克隆原型模式

使用 DataInputStream 或者 DataOutputStream 可以读写对象数据,但是操作比较繁琐
提供了 ObjectInputStream/ObjectOutputStream 可以直接将 Object 写入或读出
这里实际上还有针对 8 种简单类型及其包装类的操作方法,以及针对 String 类型的操作方法
读写一个对象的前提是这个类型的对象是可以被序列化的;
NotSerializableException
对象序列化【简单来说就是将对象可以直接转换为二进制数据流】 / 对象的反序列化【可以将二进制数据
流转换为对象】
可以通过 ObjectInputStream readObject():Object 】和
ObjectOutputStream writeObject(Object):void 】提供的方法直接操作对象
class User implements Serializable
Serializable 接口是标志接口,没有需要实现的方法,所有的序列化和反序列化操作由 VM 负责实现。
Externalizable 接口定义为 public interface Externalizable extends java.io.Serializable ,这个接口中包
含两个方法需要实现 writeExternal 自定义实现对象的序列化, readExternal 自定义实现对象的反序列
化。除非特殊需求一般不使用 Externalizable 接口,因为没有必要自定义
类型转换问题:
Object temp = ois . readObject ();
if ( temp != null && temp instanceof User ) {
User user = ( User ) temp ;
System . out . println ( user );
}
4 private static final long serialVersionUID = 6889840055394511246L
如果不添加序列号,则会有警告信息,但是不是错误信息
一般选择 Add generated serial version ID 会生成一个在项目中永不重复的的序列版本编号
序列版本号可以不用添加 , 这个序列版本号是一种序列化和反序列化中快速识别类型的简单方法,比不加
序列号的识别效率高。引入的功能是如果版本号不对应,不会进行类型识别,而是直接报异常
InvalidClassException
5 、一般针对敏感数据不应该进行序列化操作,针对不需要进行序列操作的属性可以添加一个关键字
transient ,表示该属性不参与序列化和反序列化操作
读文件的判断:读取文件时可以通过 EOFException 异常来判断文件读取结束
\
已经向文件中写入数据后,继续追加存储,则读取数据会出现 StreamCorruptedException
ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new
FileOutputStream("users.data",true)));
如果某个类的属性类型不是基本类型或者 String 类型,且没有实现可序列化接口,则该类型属性
类是不可序列化
针对于对象中的 InputStream/OutputStream 之类的资源类型的属性,不仅不能进行序列化操作,而且
在序列化之前应该释放资源,在反序列化后应该重新创建资源链接。 Externalizable
序列化总结
Java 序列化就是将一个对象转化为一个二进制表示的字节数组,通过保存或则转移这些二进制数组达到
持久化的目的。要实现序列化,需要实现 java.io.Serializable 接口。反序列化是和序列化相反的过程,就
是把二进制数组转化为对象的过程。在反序列化的时候,必须有原始类的模板才能将对象还原。
当父类实现了 Serializable 接口的时候,所有的子类都能序列化
子类实现了 Serializable 接口,父类没有,父类中的属性不能被序列化 ( 不报错,但是数据会丢失 )
如果序列化的属性是对象,对象必须也能序列化,否则会报错
反序列化的时候,如果对象的属性有修改或则删减,修改的部分属性会丢失,但是不会报错
在反序列化的时候 serialVersionUID 被修改的话,会反序列化失败
在存 Java 环境下使用 Java 的序列化机制会支持的很好,但是在多语言环境下需要考虑别的序列化机
制,比如 xml json protobuf
对象克隆
浅克隆
深克隆
原型模式
原型模式 Prototype Pattern 是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建
型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,
则采用这种模式
意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
优点: 1 、性能提高。 2 、逃避构造函数的约束。
缺点: 1 、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一
定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。 2 、必须实现
Cloneable 接口。
注意:与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对
象的。浅拷贝实现 Cloneable ,重写,深拷贝是通过实现 Serializable 读取二进制流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值