阅读 139
Serializable实现序列化接口

Serializable实现序列化接口

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

前言:在我们编写JAVA程序的时候不难看到Serializable和JDK提供的一些引用类型中可以经常看见Serializable的身影。

序列化的作用

我们在日常的开发中在定义实体时一般都会实现Serializable接口,在点击查看Serializable接口时发现他仅仅只是一个接口,没有任何的方法。那这个接口有什么作用呢?这里就要引出我今天想分享的一个知识点就是序列化(在面试的时候,也经常会被问:你讲一下什么是序列化),以前刚开始接触这个知识点发现对他的理解总是很模糊,现在算有一些理解了。 序列化:把一个Java对象写入到硬盘或者传输到网络上面的其它计算机,这时我们就需要自己去通过java把相应的对象转换成字节流。而序列化就是是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象(用我自己理解的话就是:序列化就是为了在传输java对象的过程中能正确完整的传输,我们的数据如果从一台计算机到另一台计算机最终都是通过二进制位进行传输的 一个字节等于8个比特位)

Serializable

在我们平时定义实体类的时候经常可以看见我们在后面实现了一个Serializable接口代码如下,为确保不同java编译器的SerialVersionId值一致实现。我们可序列化类必须声明显式SerialVersionId值,还强烈的声明了需要用private来修饰。 在Serializable的接口中他没有任何的实现,他用于实例化。

image.png

还有在一些引用类型中也可以清晰的看得见Serializable的身影,这边我就拿Integer来举例,我们可以看见如下图所示Integer所有的继承和实现。 若类实现序列化接口,则该接口是一个标志性的接口,标注该类可被序列

image.png 在实现了序列化接口,若没有声明serialVersionUID值,系统会默认生成一个,也可以自己声明一个 serialVersionUID值 其赋初值含有两种方式,一个是通常设置1L或者是使用JDK工具等随机设置一个数值。

public class UserInfo implements Serializable {
    private static final long serialVersionUID = 1L;
}
复制代码

今天分析的序列化内容只是我们一般比较易于理解的,而关于更深一些的东西 还需要下来多去了解学习:如实现序列化会给程序带来什么什么开销呢?等问题

文章分类
后端
文章标签