Java Serializable接口

Java Serializable接口

Serializable接口提供了将对象序列化的功能。它没有定义任何方法和成员变量。当一个类实现了Serializable接口时,它只是表示该类及其子类可以被序列化。Serializable接口用于实现对象的序列化和反序列化。

在本文中,我们将通过示例讨论Serializable接口在Java中的使用。

Java中的序列化和反序列化

序列化是一种机制,用于将给定的对象表示为一系列字节,而反序列化是将一系列字节表示为一个对象。除了静态和瞬态变量之外,类的所有成员在序列化过程中都可以被保留。这些操作有许多应用之一是远程方法调用,它允许从一台机器调用另一台机器的方法。

正如我们之前讨论的,使用序列化功能的唯一方法是使用Serializable接口。因此,我们需要先实现它。

Serializable接口的语法

accesSpecifier class nameOfclass implements Serializable {
   // your code here
}

accesSpecifier − 用于设置方法的访问权限。它可以是public, protected, default 和 private。

implements − 这是一个关键字,它允许类与接口相关联并使用其功能。

要使用Serializable接口,重要的是要导入以下包 –

import java.io.*;

在这里,*表示我们将所有可用的类和方法导入我们的程序中。

在介绍可序列化接口的示例之前,有必要讨论一些其他内容。

ObjectOutputStream

它是OutputStream类的子类,并实现了ObjectOutput接口。它包含了多种方法,其中之一就是writeObject方法,它以一个对象作为参数,并将其转换为字节序列,即对给定的对象进行序列化。只有实现了Serializable接口的类的对象才能作为参数传递。

语法

writeObject(nameOfobject);

ObjectInputStream

它是InputStream类的一个子类,并实现了ObjectInput接口。它包含了各种方法,其中readObject是其中之一,它将字节流转换回对象,也就是进行反序列化操作。

语法

readObject();

示例1

在以下示例中,我们将理解可序列化接口的实现。

步骤

  • 步骤1 - 我们首先定义一个名为‘Details’的类,该类实现Serializable接口。在这个类中,声明两个实例变量‘st’和‘id’。这些信息将在以后被序列化和反序列化。

  • 步骤2 - 在main方法中,定义一个try块。在这个块内,创建一个ObjectOutputStream类的名为‘strmOut’的对象,用于FileOutputStream的文件流。这里,FileOutputStream指的是文件名‘stream’。然后使用‘writeObject’方法对‘Details’类的‘obj1’进行序列化。

  • 步骤3 - 在下一个try块内,创建一个ObjectInputStream类的名为‘strmIn’的对象,用于FileInputStream的文件流。这里,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

结论

序列化接口的唯一用途是对象的序列化和反序列化。我们可以将文本、音频或任何自定义数据存储在序列化对象中。在本文中,我们列出了所有帮助我们进行这个过程的方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程