Java序列化基础
来源:互联网 发布:饥荒 知乎 编辑:程序博客网 时间:2024/06/05 08:32
Java中可序列化的类必须要实现Serializable接口或Externalizable接口,那么实现这两个接口的区别是什么呢。
若实现Serializable接口,若不做任何额外处理,类会有固定的序列化方式。即对所有的属性(除了transient和static关键字修饰的类型)进行序列化。若属性是基本类型,那当然很容易序列化,但属性若是对象的引用,那也会对引用的对象进行序列化,并且以此类推。若要实现自己独特的序列化/反序列化方式,就要覆盖writeObject和readObject方法了。如下:
private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(age); }private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); age = in.readInt(); }没错,可以调用ObjectOutputStream.defaultWriteObject()调用默认的序列化方式,然后就可以实现自己独特的序列化方式了;同样,可以调用ObjectIntputStream.defaultReadObject()调用默认的反序列化方式,同时也可以根据需要实现自己的反序列化方式。
若实现了Externalizable接口,类将不会有默认的序列化方法。这时候要实现类的序列化功能就要实现writeExternal和readExternal方法。如下:
@Overridepublic void writeExternal(ObjectOutput out) throws IOException { out.writeObject(name); out.writeInt(age); @Overridepublic void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { name = (String) in.readObject(); age = in.readInt(); }
这样就实现了name和age属性的序列化和反序列化过程。
0 0
- Java 基础----序列化
- Java序列化基础
- Java序列化基础
- Java序列化基础
- JAVA对象序列化基础
- JAVA序列化基础概念
- Java基础----序列化问题
- Java基础---序列化Serializable
- java基础之序列化
- JavaWeb基础---Java序列化
- 13.Java 基础 - 序列化
- Java序列化基础案例
- Java序列化格式-Java基础
- 【Java基础之三】Java序列化
- java-基础--串行化(序列化)
- Java对象序列化使用基础
- 介绍Java对象序列化使用基础
- Java序列化基础事项回顾
- springMVC MultipartFile file文件上传及参数接受
- Codeforces Round #130 (Div. 2) A. Dubstep(STL做法)
- 黑马程序员——其他6:枚举
- 读写锁
- HDOJ1698 Just a Hook(线段树)
- Java序列化基础
- sed高级用法:模式空间(pattern space)和保持空间(hold space)
- 分治法求众数问题 (配图)
- 10进制数转16位2进制补码
- iOS应用内部切换语言,不跟随系统
- iOS 宏(define)与常量(const)的正确使用
- TCP三次握手及其背后的缺陷
- linux系统启动
- 2015 Multi-University Training Contest-5 MZL's xor