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,所以建议
显式声明。
上一篇
java集合List详解
下一篇
spring注解说明