Java 中的 Serializable 接口
Serializable 接口提供了序列化对象的功能。它不定义任何方法和成员变量。当一个类实现 serializable 接口时,它只是表明这个类及其子类可以被序列化。serializable 接口用于实现对象的序列化和反序列化。
在本文中,我们将通过示例讨论 Java 中 Serializable 接口的使用。
Java 中的序列化和反序列化
序列化是一种将给定对象表示为字节序列的机制,而其反序列化则是将字节序列表示为对象。除了静态和瞬态变量之外,类的所有成员都可以在序列化过程中保留。这些操作有许多应用,其中之一就是远程方法调用,它允许从一台机器调用另一台机器的方法。
正如我们之前讨论过的,使用序列化功能的唯一方法是使用可序列化接口。因此,我们需要先实现它。
可序列化接口的语法
accesSpecifier class nameOfclass implements Serializable { // 此处为您的代码 }
accesSpecifier − 用于设置方法的可访问性。它可以是 public、protected、default 和 private。
implements − 它是一个关键字,允许使用与其关联的类的接口功能。
要使用可序列化接口,必须导入以下包 −
import java.io.*;
这里,* 表示我们将此包中可用的所有类以及方法导入到我们的程序中。
在进入可序列化接口的示例之前,有必要讨论一些其他事情。
ObjectOutputStream
它是 OutputStream 类的子类,并实现 ObjectOutput 接口。它包含各种方法,writeObject 是其中之一,它将对象作为参数并将其转换为字节序列,这意味着它会序列化给定的对象。只有那些实现 Serializable 接口的类的对象才能作为参数传递。
语法
writeObject(nameOfobject);
ObjectInputStream
它是 InputStream 类的子类,并实现 ObjectInput 接口。它包含各种方法,readObject 是其中之一,它将字节流转换回对象,这意味着它执行反序列化。
语法
readObject();
示例 1
在下面的示例中,我们将了解可序列化接口的实现。
算法
步骤 1 - 我们将首先定义一个名为"Details"的类,该类实现可序列化接口。在此类中,声明两个实例变量"st"和"id"。这些信息稍后将被序列化和反序列化。
步骤 2 - 在主方法中,定义一个 try 块。在此块内,为 FileOutputStream 的文件流创建一个名为"strmOut"的 ObjectOutputStream 类对象。这里,FileOutputStream 指的是文件名"stream"。然后使用"writeObject"方法序列化"Details"类的"obj1"。
步骤 3 - 在下一个 try 块中,我们将为 FileInputStream 的文件流创建一个名为"strmIn"的 ObjectInputStream 类对象。这里,FileInputStream 指的是文件名"stream"。然后使用"readObject"方法反序列化该对象并打印结果。
步骤 4 - 相应 try 块的 catch 块将处理整个过程中是否发生任何类型的异常。
import java.io.*; class Details implements Serializable { String st; int id; public Details(String st, int id) { // 构造函数 this.st = st; this.id = id; } // 将对象转换为字符串的方法 public String toString() { return "st = " + st + ", id = " + id; } } public class SerialDemo { public static void main(String args[]) { // 对象序列化的代码 try { // 创建 ObjectOutputStream 对象 ObjectOutputStream strmOut = new ObjectOutputStream(new FileOutputStream("stream")); // 将数据传递给对象 1 Details obj1 = new Details("Tutorial 1", 121); System.out.println("Data of object 1 is passed to object2...."); strmOut.writeObject(obj1); } catch(IOException exp) { System.out.println("Exception occurred during serialization of Object 1: " + exp); } // 对象反序列化的代码 try { // 创建 ObjectInputStream 对象 ObjectInputStream strmIn = new ObjectInputStream(new FileInputStream("stream")); // 读取对象 1 的详细信息 Details obj2 = (Details)strmIn.readObject(); System.out.println("Data of object 2: " + obj2); } catch(Exception exp) { System.out.println("Exception occurred during deserialization of Object 2: " + exp); } } }
输出
Data of object 1 is passed to object2.... Data of object 2: st = Tutorial 1, id = 121
结论
可序列化接口的唯一用例是对象的序列化和反序列化。我们可以将文本、音频或任何自定义数据存储在序列化对象中。在本文中,我们列出了在此过程中对我们有帮助的所有方法。