Java中的序列化接口
Serializable 接口提供了一种序列化对象的功能。它不定义任何方法和成员变量。当一个类实现 Serializable 接口时,它仅仅表示该类及其子类可以被序列化。Serializable 接口用于实现对象的序列化和反序列化。
在这篇文章中,我们将讨论 Java 中 Serializable 接口的使用,并提供示例。
Java 中的序列化和反序列化
序列化是一种将给定对象表示为字节序列的机制,其反向操作是反序列化,它将字节序列表示为对象。除了静态和瞬态变量之外,类的所有成员都可以在序列化过程中被保留。这些操作有很多应用,其中之一是远程方法调用,它允许从一台机器调用另一台机器上的方法。
正如我们之前讨论的,使用序列化功能的唯一方法是使用 Serializable 接口。因此,我们需要首先实现它。
Serializable 接口的语法
accesSpecifier class nameOfclass implements Serializable {
// your code here
}
访问修饰符 − 用于设置方法的可访问性。它可以是 public、protected、默认和 private。
implements − 是一个关键字,它使类能够使用与其关联的接口的功能。
要使用 Serializable 接口,需要导入以下包:
import java.io.*;
这里,* 表示我们正在将此包中所有可用的类和方法导入到我们的程序中。
在深入了解 Serializable 接口的示例之前,有必要再讨论一些事情。
ObjectOutputStream
它是 OutputStream 类的子类,并实现了 ObjectOutput 接口。它包含各种方法,其中 writeObject 是其中之一,它以对象作为参数,并将其转换为字节序列,这意味着它会序列化给定的对象。只有实现 Serializable 接口的类的对象才能作为参数传递。
语法
writeObject(nameOfobject);
ObjectInputStream
它是 InputStream 类的子类,并实现了 ObjectInput 接口。它包含各种方法,其中 readObject 是其中之一,它将字节流转换回对象,这意味着它执行反序列化。
语法
readObject();
示例 1
在下面的示例中,我们将了解 Serializable 接口的实现。
算法
步骤 1 − 我们将从定义一个名为“Details”的类开始,该类实现了 Serializable 接口。在这个类中,声明两个实例变量“st”和“id”。这些信息稍后将被序列化和反序列化。
步骤 2 − 在 main 方法中,定义一个 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) {
// constructor
this.st = st;
this.id = id;
}
// method for converting object into string
public String toString() {
return "st = " + st + ", id = " + id;
}
}
public class SerialDemo {
public static void main(String args[]) {
// code for serialization of object
try {
// creating object of ObjectOutputStream
ObjectOutputStream strmOut =
new ObjectOutputStream(new FileOutputStream("stream"));
// passing data to object 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);
}
// code for deserialization of object
try {
// creating object of ObjectInputStream
ObjectInputStream strmIn = new ObjectInputStream(new FileInputStream("stream"));
// reading the details of object 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
结论
Serializable 接口的唯一用例是对象的序列化和反序列化。我们可以在序列化对象中存储文本、音频或任何自定义数据。在这篇文章中,我们列出了帮助我们完成此过程的所有方法。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP