杭州 序列化与反序列化 (借鉴-侵-删)(序列化ID问题)

简介: 杭州 序列化与反序列化 (借鉴-侵-删)(序列化ID问题)

1.定义

序列化:java对象 --> 字节序列 的过程

反序列化:字节序列 --> java对象 的过程

2.作用

序列化:过程中,保证对象的完整性和可传递性,转换成字节序列可以再网络上传输或者保存在本地文件,例如:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D://data.txt"));
oos.writeObject(user);

反序列化:根据字节流中保留的对象状态及描述信息,通过反序列化重建对象,例如

File file = new File("D://data.txt");
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
User user = (User)ois.readObject();

附加,关键点

声明一个实体类,实现Serializable接口

使用ObjectOutputStream类的writeObject方法,实现序列化

使用ObjectInputStream类的readObject方法,实现反序列化

3.优缺点

优点:

1.将对象转为字节流存到硬盘上,当JVM宕机后,直接会在硬盘上等待JVM下一次开机,并将字节流转换成对象,而且序列化的二进制能够减少存储空间

2.序列化后的字节流可以进行网络传输。

3.通过序列化可以在进程间传递对象。

缺点:

1.java的序列化无法跨语言,也就是当跨进程进行服务调用,调用的是其他语言,序列化就不好用了

2.序列化后的流的长度比通过缓冲区要长的多

3.序列化性能太低

4.序列化场景

1.分布式传输对象,或者网络传输

2.调用在一个JVM,结果返回到另一个JVM

3.序列化保存对象状态

4.数据传输,复原

5.远程调用,分布式存储,缓存存储

6.一些重要的,例如密码字段选择性不让序列化(使用transient)

5.注意事项

1.方式

(1)实现Serializable接口

(2)实现Externalizable接口(需要实现方法)

2.序列化ID问题

是否可以反序列化private static final long serialVersionUID = 1L;要一致。

3.静态字段不会序列化

序列化是不保存静态变量,序列化保存的是对象的状态,静态变量属于类的状态

4.transient

transient代表对象的临时数据

5.父类的序列化

当父类实现了序列化,子类自动实现序列化,反过来之类实现序列化,父类必须实现序列化

6.并非所有的对象都可序列化

相关文章
|
1月前
|
存储 安全 Java
Java一分钟之-Java序列化与反序列化
【5月更文挑战第14天】Java序列化用于将对象转换为字节流,便于存储和网络传输。实现`Serializable`接口使类可被序列化,但可能引发隐私泄露、版本兼容性和性能问题。要避免这些问题,可使用`transient`关键字、控制`serialVersionUID`及考虑使用安全的序列化库。示例代码展示了如何序列化和反序列化对象,强调了循环引用和未实现`Serializable`的错误。理解并妥善处理这些要点对优化代码至关重要。
29 1
|
3天前
|
JSON Java API
jackson序列化和反序列化中的注解和扩展点大全【收藏】
jackson序列化和反序列化中的注解和扩展点大全【收藏】
|
4天前
|
存储 JSON 数据库
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
|
6天前
|
Java 数据库 开发者
Java中的序列化与反序列化
Java中的序列化与反序列化
|
13天前
|
网络协议 Java API
【Java】序列化和反序列化
【Java】序列化和反序列化
16 4
|
17天前
|
Java 数据安全/隐私保护 Android开发
Java基础21-读懂Java序列化和反序列化(二)
Java基础21-读懂Java序列化和反序列化(二)
35 1
|
17天前
|
XML 存储 Java
Java基础21-读懂Java序列化和反序列化(一)
Java基础21-读懂Java序列化和反序列化(一)
17 1
|
23天前
|
JSON 缓存 Java
【Java基础】 序列化和反序列化
Java中的序列化(Serialization)和反序列化(Deserialization)是将对象和字节流之间进 行相互转换的过程。这两个过程用于保存对象的状态并能够在需要时恢复这些状态。
14 1
|
2天前
|
存储 Java 数据库
Java中序列化与反序列化详解
Java中序列化与反序列化详解
5 0
|
3天前
|
JSON Java 数据格式
实现自定义序列化和反序列化控制的5种方式
实现自定义序列化和反序列化控制的5种方式