122
技术社区[云栖]
Java序列化和反序列化
- 序列化:Java对象转换为字节序列
- 反序列化:字节序列转换为Java对象
实现了Serializable或Externalnalizable接口的接口或类,通过ObjectInputStream或ObjectOutputStream可以进行二进制文件与Java对象之间的转换。
Serializable
- 实现了Serializable的对象,可以将该对象的非transient的实例变量进行序列化或反序列化。
- 若重写了
readObject(ObjectInputStream in)
和writeObject(ObjectOutputSteam out)
方法,则会调用这两个方法进行序列化或反序列化。
PS:non-transient字段不会参与序列化会反序列化,这样,有时传输数据对象可以节省不必要的时空开销。
普通序列化
MyObject obj = new MyObject("zou", "male");
// 序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/user/zoujs/documents/java.obj"));
out.writeObject(obj);
out.close();
// 反序列化
ObjectInputStream in = new ObjectInputStream(new FileOutputStream("/user/zoujs/documents/java.obj"));
MyObject object = (MyObject)in.readObject();
in.close();
结合从前写的Closeable的文章,可以将代码写成如下形式。
// 序列化
MyObject obj = new MyObject("zou", "male");
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/users/zoujs/documents/java.obj"))){
out.writeObject(obj);
}
// 反序列化
MyObject object;
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("/user/zoujs/documents/java.obj"))){
object = (MyObject)in.readObject();
}
带 readObject()
和 writeObject()
方法的序列化和反序列化
这两个方法可以在序列化和反序列化时定制用户的行为,即使它们被生命为private,但这丝毫不影响它们的作用。
实际上,ObjectInputStream和ObjectOutputStream通过反射来寻找对象是否实现了这两个方法,
最后更新:2017-08-21 20:02:16
上一篇:
记一次阿里云ECS实例预约迁移
下一篇:
Closeable
js动态创建div等元素实例
《Hadoop与大数据挖掘》一2.6 TF-IDF算法原理及Hadoop MapReduce实现
Guava 是个风火轮之基础工具(2)
JavaEE中使用Filter来实现图片的防盗链
"0x00a1bdb3" 指令引用的 "0x00000001" 内存。该内存不能为 "read"。
《Spring Cloud Netflix》 -- 服务注册和服务发现-Eureka的常用配置
语音兰度短信
打造高效前端工作环境-tmuxinator
redis分布式锁,无须设置有效期,自动检测hold锁的节点是否存活
时间、空间、对象 海量极速多维检索 - 阿里云RDS PostgreSQL最佳实践