首页 >> 编程狮 >> 后端

Serializable

  • 后端
  • 2025-07-18
  • 点击次数:

Serializable是什么,为什么要实现Serializable接口?

一般情况下,我们在定义实体类时会实现Serializable接口。

示例:

public class User implements Serializable{

    private static final long seriaVersionUid = 1L;

    private String userId;

    private String userName;

    private int age;

    public  String getUserId(){

        return userId;

    }

    public void setUserId(String userId){

        this.userId=userId;

    }

    public String  getUserName(){

        return userName;

    }

    public void setUserName(String userName){

        this.userName=userName;

    }

       

}

1、什么是serializable接口?

一个对象序列化接口,一个类只有实现Serializable接口,它的对象才能被序列化。

Serializable是java.io包中定义的,用于实现java类的序列化操作而提供的语义级别的接口。

Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。

实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过

ObjectInputStream再将其解析为对象。例如:我们可以将序列化对象写入文件后,再次从

文件读取它并序列化成对象。

2、什么是序列化?

序列化是将对象状态转换为可保持或传输的格式过程。与序列化对应的是反序列化,它将流

转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

为什么要序列化对象?

把对象转换为字节序列的过程称为对象的序列化。

把字节对象恢复为对象的过程称为对象的反序列化。

序列化对于面向对象的编程语言来说是重要的,因为无论什么编程语言,其底层设计IO操作

的部分还是由操作系统帮其完成的,而底层IO操作都是以字节流的方式进行的,所以写操作都

涉及将编程语言数据类型转换为字节流,而读操作又涉及将字节流转化为编程语言类型的特定

数据类型。

序列化——把对象状态转化为字节序列,以便存储到文件、数据库,或在网络上传输。

反序列化——把字节流重新变回对象,ObjectInputStream能从字节流解析出对象。

serialVersionUID——序列化运行时给每个可序列化类关联的版本号,用于反序列化时

校验发送者和接收者加载的类是否兼容,若类未显式声明,系统会基于类细节计算默认值,

不同编译器实现可能使默认值有差异,导致反序列化时抛出InvalidClassException,所以建议

显式声明。

标签: