当前位置: 首页 > news >正文

创建实体类pojo实现Serializable接口

案例如下:

一、什么是Serializable接口

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

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

二、使用场景

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

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

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

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

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

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

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

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

三、如何使用

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

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

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

   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

   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.mrgr.cn/news/42536.html

相关文章:

  • 全球最具影响力的思想家颜廷利在中国影响力地位
  • ubuntu * 表达的应用
  • I2C以及OLED屏幕的实际应用
  • 【C++】—— vector模拟实现
  • k8s-集群部署
  • 微智启yolo数据集划分工具免费分享下载
  • 腾讯云技术深度解析:从微服务到AI编程助手的应用实践
  • Spring框架:Spring Core、Spring AOP、Spring MVC、Spring Boot、Spring Cloud等组件的基本原理及使用
  • 神经网络分类任务
  • webGL入门(六)图形旋转
  • 快速点特征直方图 (FPFH) 描述符 和 点特征直方图 (PFH) 描述符 的差异
  • Redis篇(面试题 - 连环16炮)(持续更新迭代)
  • 数据链路层(以太网简介)
  • 24年最新大众点评数据
  • 【深度学习基础模型】回声状态网络(Echo State Networks, ESN)详细理解并附实现代码。
  • Vue2如何在网页实现文字的逐个显现
  • 69.【C语言】动态内存管理(重点)(2)
  • 【60天备战2024年11月软考高级系统架构设计师——第36天:系统安全设计——数据加密】
  • 【微服务】负载均衡 - LoadBalance(day4)
  • 我与世界的联系---读书