首页 > 编程语言 >Java对象序列化和反序列化

Java对象序列化和反序列化

时间:2022-10-03 21:35:44浏览次数:82  
标签:Java name 对象 age private static Student 序列化

Java类的序列化和反序列化

序列化:指将对象转换为字节序列的过程,也就是将对象的信息转换成文件保存。

反序列化:将字节序列转换成目标对象的过程,也就是读取文件,并转换为对象。

几个关键点:

  • 必须实现Serializable接口才可以进行序列化
  • 字段属性serialVersionUID决定了被修改后的类(比如增加或删除了一个字段),序列化和反序列化是否成功【相当于验证版本一致性的编号】

这个字段可以自定义,也可以用IDE生成,还可以调用方法生成

自定义比如: private static final long serialVersionUID = 1L;

使用编译器生成需要设置一下:

Java对象序列化和反序列化_反序列化

Java对象序列化和反序列化_反序列化_02

Java对象序列化和反序列化_反序列化_03

使用代码生成可以这样写:

ObjectStreamClass c = ObjectStreamClass.lookup(Student.class);
long serialID = c.getSerialVersionUID();
System.out.println(serialID);

建议自己指定一个ID,因为如果是自动生成的话,可能会存在版本不同的问题。

!!!记住这个字段的类型是static final long !!!

下面上代码:

待序列化的类Student

package serializable;

/**
* @author Administrator
* @date 2022-09-26 21:47
*/
// 实现Serializable接口的学生类
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = -575577087488357438L;
private int age;
private String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}

序列化和反序列化测试类STest

package serializable;

import java.io.*;

/**
* @author Administrator
* @date 2022-09-26 21:48
*/
public class STest {
public static void main(String[] args) {
serial();
deserial();
}
// 序列化方法
private static void serial(){
Student student = new Student(21, "John");
try {
// FileOutputStream流是指文件字节输出流,
// 专用于输出原始字节流如图像数据等,其继承OutputStream类,拥有输出流的基本特性
FileOutputStream fileOutputStream = new FileOutputStream("Student.txt");
// 对象的序列化流,作用:把对象转成字节数据的输出到文件中保存,
// 对象的输出过程称为序列化,可实现对象的持久存储。
ObjectOutputStream objectOutputStream= new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(student);
objectOutputStream.flush();
} catch (Exception exception) {
exception.printStackTrace();
}
}
// 反序列化方法
private static void deserial() {
try {
FileInputStream fis = new FileInputStream("Student.txt");
// ObjectInputStream 反序列化流,
// 将之前使用 ObjectOutputStream 序列化的原始数据恢复为对象,以流的方式读取对象。
// 构造方法 ObjectInputStream(InputStream in) 创建从指定 InputStream 读取的 ObjectInputStream。
ObjectInputStream ois = new ObjectInputStream(fis);
Student student = (Student) ois.readObject();
ois.close();
System.out.println(student.toString());
}catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}

直接运行STest的main方法,可以看到生成了Student.txt字节流序列化文件,再次调用反序列化方法deserial可以看到控制台成功输出了Student对象的信息。【因为重写了toString方法,所以输出的是字段属性值】

Java对象序列化和反序列化_字段_04

Java对象序列化和反序列化_序列化_05

好看请赞,养成习惯:) ,作者:​​靠谱杨​​​, 转载请注明原文链接​

关于笔者:​​ 我的主页 ​

文章同步51CTO,可以帮忙踩一踩 ~ ​​我的51CTO博客​

更多日常分享尽在我的VX公众号:靠谱杨的挨踢生活

Java对象序列化和反序列化_Java_06



标签:Java,name,对象,age,private,static,Student,序列化
From: https://blog.51cto.com/reliableyang/5730488

相关文章

  • Java项目打成镜像
    前言官方只有java8的docker镜像,如果我们的项目使用java11开发的,那么用java8的镜像打包运行会报错那么我们部署java项目有两种方式如:1.将项目打成war包部署到tomcat容器,2.自......
  • 实验1类和对象(1)
    1.实验任务11.template指的是模板。比如,我们要写一个swap函数来交换两个元素。但这两个元素可能是int也可能使char,如果不用模板的话,我们可能要写多个函数才能完成。但是......
  • Java中Map.Entry
    Map<String,String>map=newHashMap<String,String>();map.put("1","value1");map.put("2","value2");map.put("3","value3");遍历map方式1:Ma......
  • java BIO
    packageIO;//文件、数组、管道、基本数据类型、缓冲、打印、对象序列化/反序列化,以及转换等​importjava.io.*;​/***操作文件{*  1.文件字节流:FileInpu......
  • JAVA学习前准备
    电脑常用快捷键Ctrl+C:复制Ctrl+V:粘贴Ctrl+A:全选Ctrl+X:剪切Ctrl+Z:撤销Ctrl+S:保存Alt+F4:关闭窗口Shift+delete:永久性删除文件win键+R:打开运行win键+E:打......
  • java工厂方法模式学习
    总结;定义一个接口,多个实现类,一个工厂方法publicinterfaceHuman{voideat();voidsleep();}publicclassWhiteHumanimplementsHuman{@Overr......
  • java---回顾方法的定义和调用
    方法的回顾和调用packagecom.oop.demo;​importjava.io.IOError;importjava.io.IOException;​//return代表方法结束,返回一个结果//下方就是一个类publicclassDemo01......
  • java网络编程--3 TCP
    java网络编程--3TCP1.6、TCP客户端连接服务器Socket发送消息packagecom.ssl.lesson02;importjava.io.IOException;importjava.io.OutputStream;importja......
  • 肖sir__Java中模块__11
       一、random模块1、定义 random :用于产生一个随机数2、使用步骤:(1)导包(2)创建对象(3)获取随机数   案例:   importjava.util.Random;......
  • 第一个Java程序hello world
    day4:我的第一个JAVA程序HelloWorldpublicclassMain{publicstaticvoidmain(String[]args){System.out.println("hello,world");}}注意事项......