Java8基础学习之Serializable接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java8基础学习之Serializable接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2466字,纯文字阅读大概需要4分钟。
内容图文
![Java8基础学习之Serializable接口](/upload/InfoBanner/zyjiaocheng/794/fd538e7a594240f2b5eddbc2207dbdbc.jpg)
Serializable接口介绍
Serializable 是 java.io 包中定义的、用于实现 Java 类的序列化操作而提供的一个语义级别的接口。Serializable 序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被 ObjectOutputStream 转换为字节流,同时也可以通过 ObjectInputStream 再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象。简单说就是为了保存在内存中的各种对象的状态(也就是实例变量),并且可以把保存的对象状态再读出来。
序列化是指把对象转换为字节序列的过程,我们称之为对象的序列化,就是把内存中的这些对象变成一连串的字节(bytes)描述的过程。
而反序列化则相反,就是把持久化的字节文件数据恢复为对象的过程。
serialVersionUID 介绍
对于 JVM 来说,要进行持久化的类必须要有一个标记,只有持有这个标记 JVM 才允许类创建的对象可以通过其 IO 系统转换为字节数据,从而实现持久化,而这个标记就是 Serializable 接口。而在反序列化的过程中则需要使用 serialVersionUID 来确定由那个类来加载这个对象,所以我们在实现 Serializable 接口的时候,一般还会去显示地定义 serialVersionUID。在反序列化的过程中,如果接收方为一个类的对象声明,如果该对象的 serialVersionUID 与待反序列化的对象不同,那么反序列化的过程中将会导致InvalidClassException异常。
代码
Person类
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 8241970228716425282L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [name=" + name + "]";
}
}
测试类
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.setName("feige");
writeObj(p);
Person p2 = readObj();
System.out.println(p2);
}
// 序列化
public static void writeObj(Person p) {
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("E://1.txt"));
objectOutputStream.writeObject(p);
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 反序列化
public static Person readObj() {
Person p = null;
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("E://1.txt"));
try {
p = (Person)objectInputStream.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return p;
}
}
控制台输出:Person [name=feige]
内容总结
以上是互联网集市为您收集整理的Java8基础学习之Serializable接口全部内容,希望文章能够帮你解决Java8基础学习之Serializable接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。