创建实体类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();
           }
       }
   }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值