创建实体类pojo实现Serializable接口

news/2024/10/4 15:41:58/

案例如下:

一、什么是Serializable接口

在 Java 中,Serializable 接口是一个标记接口,它的主要作用是指示一个类的对象可以被序列化

序列化是将对象转换为字节流的过程,以便将其保存到文件、通过网络传输或存储在数据库中,之后又可以将其反序列化为原来的对象,通俗来讲,就是把一个对象变成可以存储或者传输的形式的过程。

二、使用场景

持久化存储:当您需要将对象的状态保存到文件、数据库或其他存储介质中时,您需要实现 Serializable 接口,以便将对象序列化为字节流。

网络通信:如果您的应用需要通过网络发送对象(例如,调用远程方法、Web 服务或分布式应用),对象需要实现 Serializable 接口,以便在网络上传输。

缓存机制:在使用某些框架(如 Spring、Hibernate)时,这些框架可能会将对象缓存起来以提高性能,只有实现了 Serializable 接口的对象才能被安全地存入缓存。

Java RMI:在使用 Java 远程方法调用(RMI)时,传输的对象必须实现 Serializable 接口,以便在不同的 JVM 之间发送对象。

会话管理:在 Web 应用中,如果您需要将用户会话对象存储在 HTTP 会话中,通常也需要实现 Serializable 接口,以便在服务器重启或负载均衡时能够恢复会话状态。

对象的深拷贝:通过序列化和反序列化的方式可以实现对象的深拷贝,特别是在对象包含复杂的嵌套结构时,手动复制可能比较麻烦。

总之,若需要对象能够在持久化、网络传输、缓存、会话管理或其他需要对象序列化的情况下安全地存储和恢复,那么就需要实现 Serializable 接口。

这样可以确保对象可以方便地被转换为字节流,并在需要时再转回为对象。

三、如何使用

直接在实体类中implements该接口即可,由于这个接口是一个标记接口,没有任何方法需要实现。

如果涉及到将其状态保存到文件、数据库或者在网络中传输,需要进行序列化和反序列化,操作如下:

①序列化操作(将对象转换为字节流):使用ObjectOutputStream

java">   import java.io.FileOutputStream;import java.io.ObjectOutputStream;//将MyClass的一个对象序列化到文件中:public class SerializationExample {public static void main(String[] args) {try {MyClass obj = new MyClass(1, "John");//创建一个ObjectOutputStream对象,它用于将对象写入到输出流中。FileOutputStream fileOut = new FileOutputStream("myObject.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut);out.writeObject(obj);out.close();fileOut.close();System.out.println("Object has been serialized");} catch (Exception e) {e.printStackTrace();}}}

②反序列化操作(将字节流转换回对象):使用ObjectInputStream

java">   import java.io.FileInputStream;import java.io.ObjectInputStream;//从之前序列化的文件中读取对象:public class DeserializationExample {public static void main(String[] args) {try {//创建一个ObjectInputStream对象,它用于从输入流中读取对象FileInputStream fileIn = new FileInputStream("myObject.ser");ObjectInputStream in = new ObjectInputStream(fileIn);MyClass obj = (MyClass) in.readObject();in.close();fileIn.close();System.out.println("Object has been deserialized");System.out.println("ID: " + obj.getId() + ", Name: " + obj.getName());} catch (Exception e) {e.printStackTrace();}}}

注意:其他普通的对象操作,如在本地方法调用中实体类对象进行简单的业务逻辑处理,并不需要进行序列化和反序列化操作。


http://www.ppmy.cn/news/1534490.html

相关文章

(C语言贪吃蛇)14.用绝对值方式解决不合理的走位

目录 前言 解决方式 运行效果 总结 前言 我们上节实现了贪吃蛇四方向走位,但是出现了一些不合理的走位,比如说身体节点和头节点重合等等,本节我们便来解决这个问题。 我们希望贪吃蛇撞到自身时游戏会重新开始,并且贪吃蛇的运动方…

【Kubernetes】常见面试题汇总(四十七)

目录 106.考虑一种情况,公司希望通过保持最低成本来提高效率和技术运营速度。您如何看待公司将如何实现这一目标? 107.假设一家公司想要修改其部署方法,并希望构建一个可扩展性和响应性更高的平台。您如何看待这家公司能够实现这一目标以满足…

日常工作技术点总结

1&#xff0c;在el-input中只能输入数值与小数点&#xff0c;且不会有其他的校验影响 //在模板中 <el-col :span"7"><el-form-item label"建设单位支付(元)" prop"unitAmount" label-width"120px">el-input v-model"…

如何突破科技服务领域的客户管理困境?

在知识产权与科技服务领域&#xff0c;企业面临着独特的客户管理需求和挑战&#xff0c;这些挑战不仅要求高度的专业性和精细化操作&#xff0c;还涉及复杂的法律流程、数据保密性以及不断变化的客户需求。传统的客户管理方式&#xff0c;如纸质档案、简单的电子表格或人工处理…

初识Linux · 进程替换

目录 前言&#xff1a; 1 直接看代码和现象 2 解释原理 3 将代码改成多进程版本 4 认识所有函数并使用 前言&#xff1a; 由前面的章节学习&#xff0c;我们已经了解了进程状态&#xff0c;进程终止以及进程等待&#xff0c;今天&#xff0c;我们学习进程替换。进程替换我…

小程序电量

原生小程序&#xff1a; wx.getBatteryInfo({success: res > {console.log(res);}; }); success返回值&#xff1a; level设备电量&#xff0c;范围 1 - 100isCharging是否正在充电中 uniapp&#xff1a; uni.getBatteryInfo({success: res > {console.log(res);};…

论文笔记(四十七)Diffusion Policy: Visuomotor Policy

Diffusion Policy: Visuomotor Policy 文章概括摘要1. 介绍2. 扩散策略的公式化2.1 去噪扩散概率模型2.2 DDPM 训练2.3 用于视觉运动策略学习的扩散模型 3 关键设计决策3.1 网络架构选项3.2 视觉编码器3.3 噪声计划3.4 加速实时控制的推理 4. 扩散策略的四个引人入胜的特性4.1 …

Springboot + netty + rabbitmq + myBatis

目录 0.为什么用消息队列1.代码文件创建结构2.pom.xml文件3.三个配置文件开发和生产环境4.Rabbitmq 基础配置类 TtlQueueConfig5.建立netty服务器 rabbitmq消息生产者6.建立常规队列的消费者 Consumer7.建立死信队列的消费者 DeadLetterConsumer8.建立mapper.xml文件9.建立map…