Java中的序列化和Hadoop序列化的区别
一、概念
1)序列化:将结构化对象转换为字节流的过程,以便在网络上传输或写入到磁盘进行永久存储的过程。
2)反序列化:将字节流转回一系列的相反过程结构化对象。
二、作用
1)进程间的通信
2)持久化存储
三、实现序列化和反序列使用的不同
Java:
ObjectOutputStream序列化过程:实现内部中的数据,写入到具体的文件中;
ObjectInputStream反序列化过程:将磁盘文件中保存的对象,还原为内存中的对象;
***Hadoop:***需要重写一下俩方法
write(DataOutput out) :对象的序列化
readFields(DataInput in) :对象的反序列化
四、序列化步骤
Java:
① 实现java.io.Serializable接口;
② 显式声明全局常量 static final long serialVersionUID,用于唯一标识当前类;
③ 要想当前类的对象可序列化,必须其所有的属性也都是可以序列化的。
说明:
① 默认情况下,基本数据类型的变量都可以序列化;
② ObjectOutputStream和ObjectInputStream 不可序列化static和transient修饰的成员变量;
Hadoop:
① 实现Writable接口;
② 在类中提供无参的构造器,反序列化时会反射调用;
③ Write()方法中写出的fields顺序与readFields()读取的fields顺序一致;
④ 一般也会重写toString()。