一、序列化

序列化定义:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
目的:
二、Java序列化
一个对象能够序列化的前提是实现Serializable接口。Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。如下:
class myPoint implements Serializable{
}
JAVA反序列化不会调用任何构造器
序列化的控制:Externalizable。读写都交给你
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException,ClassNotFoundException;
public class Point implements Externalizable {
private int a;
private int b;
public Point(int a, int b) {
this.a = a;
this.b = b;
}
public Point() {
}
public String toString() {
return a + " , " + b;
}
public void writeExternal(ObjectOutput out) throws IOException {
out.write(a);
out.write(b);
}
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
a = in.read();
b = in.read();
}
public static void main(String[] args) throws IOException,
ClassNotFoundException {
String file = "d://1.txt";
Point p = new Point(1, 2);
System.out.println(p);
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(p);
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Point pp = (Point) ois.readObject();
System.out.println(pp);
}
}
三、序列化的问题
在effective Java中列举出了java序列化要注意的一些问题:
1.谨慎地设计实现Serializable接口
2.保护性地编写 readObject()方法,因为readObject()是构建实例的入口。
不保护可能出现 构建了不满足要求的 实例
3.考虑自定义的序列化形式
public class StringList implements Serializable {
private transient int size = 0;
private transient Entity head = null;
public final void add(String str) {
// ...
}
private static class Entity {
String data;
Entity next;
Entity previous;
}
private void writeObject(ObjectOutputStream s) throws IOException {
s.defaultWriteObject();
s.write(size);
for (Entity e = head; e != null; e = e.next) {
s.writeObject(e.data);
}
}
private void readObject(ObjectInputStream s) throws IOException,
ClassNotFoundException {
s.defaultReadObject();
int num = s.read();
for (int i = 0; i < num; i++) {
this.add((String) s.readObject());
}
}
}
四、序列化代理模式
序列化机制提供的钩子函数有:
writeReplace writeObject readObject readResolve
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.Date;
public final class Period implements Serializable {
private static final long serialVersionUID = 100L;
private final Date start;
private final Date end;
public Period(Date start, Date end) {
this.start = new Date(start.getTime());
this.end = new Date(end.getTime());
if (this.start.compareTo(this.end) > 0) {
throw new IllegalArgumentException(start + " after " + end);
}
}
public Date start() {
return new Date(start.getTime());
}
public Date end() {
return new Date(end.getTime());
}
public String toString() {
return start + " - " + end;
}
// 不给
private Object writeReplace() {
return new SerializationProxy(this);
}
private void readObject(ObjectInputStream stream)
throws InvalidObjectException {
throw new InvalidObjectException("proxy request");
}
private static class SerializationProxy implements Serializable {
private final Date start;
private final Date end;
SerializationProxy(Period p) {
this.start = p.start;
this.end = p.end;
}
private Object readResolve() {
return new Period(start, end);
}
private static final long serialVersionUID = 1000L;
}
}
五、序列化算法
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java序列化
# java
# 序列化实例
# 序列化详解
# java 中Spark中将对象序列化存储到hdfs
# 浅谈java中为什么实体类需要实现序列化
# 序列化版本号serialVersionUID的作用_动力节点Java学院整理
# 详解Java 对象序列化和反序列化
# Java 序列化和反序列化实例详解
# 浅谈Java序列化和hessian序列化的差异
# 序列化
# 递归
# 自定义
# 子类
# 要在
# 的是
# 是个
# 出了
# 就能
# 要有
# 适用于
# 这两个
# 要注意
# 希望能
# 不给
# 结合起来
# 谢谢大家
# 提供一个
# 则可
# 所要
相关文章:
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
建站之星安装后如何自定义网站颜色与字体?
简单实现Android验证码
表情包在线制作网站免费,表情包怎么弄?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站主机是什么?如何选择适合的建站主机?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
建站主机选虚拟主机还是云服务器更好?
建站主机SSH密钥生成步骤及常见问题解答?
建站主机服务器选型指南与性能优化方案解析
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站主机默认首页配置指南:核心功能与访问路径优化
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何用狗爹虚拟主机快速搭建网站?
免费视频制作网站,更新又快又好的免费电影网站?
linux top下的 minerd 木马清除方法
如何在腾讯云服务器快速搭建个人网站?
西安专业网站制作公司有哪些,陕西省建行官方网站?
广州建站公司哪家好?十大优质服务商推荐
公司网站制作需要多少钱,找人做公司网站需要多少钱?
家庭服务器如何搭建个人网站?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
大连 网站制作,大连天途有线官网?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何确保西部建站助手FTP传输的安全性?
IOS倒计时设置UIButton标题title的抖动问题
如何在景安服务器上快速搭建个人网站?
建站之星2.7模板:企业网站建设与h5定制设计专题
建站之星安装后界面空白如何解决?
长沙做网站要多少钱,长沙国安网络怎么样?
广州美橙建站如何快速搭建多端合一网站?
如何高效完成自助建站业务培训?
b2c电商网站制作流程,b2c水平综合的电商平台?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何快速搭建响应式可视化网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
网站制作价目表怎么做,珍爱网婚介费用多少?
音响网站制作视频教程,隆霸音响官方网站?
如何在万网自助建站中设置域名及备案?
建站之星在线版空间:自助建站+智能模板一键生成方案
已有域名和空间如何快速搭建网站?
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站之星代理商如何保障技术支持与售后服务?
如何在云主机上快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。