Java 中的 Externalizable 介面


我們需要自定義序列化機制時,應使用外部化。如果一個類實現了 Externalizable 介面,則物件序列化將使用 writeExternal() 方法進行。而在接收方,當物件是 Externaizable 時,將使用無參建構函式建立一個重建例項,然後呼叫 readExternal() 方法。

如果一個類僅實現了 Serializable 介面,物件序列化將使用 ObjectoutputStream 進行。在接收方,可序列化物件使用 ObjectInputStream 重建。

以下示例展示了 Externalizable 介面的用法。

示例

import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;

public class Tester {
   public static void main(String[] args) {

      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.age = 30;
      try (
         FileOutputStream fileOut = new FileOutputStream("test.txt");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
      ) {
         out.writeObject(e);
      }catch (IOException i) {
         System.out.println(i.getMessage());
      }
      try (
         FileInputStream fileIn = new FileInputStream("test.txt");
         ObjectInputStream in = new ObjectInputStream(fileIn);
      ) {
         e = (Employee)in.readObject();
         System.out.println(e.name);
         System.out.println(e.age);
      } catch (IOException i) {
         System.out.println(i.getMessage());
      } catch (ClassNotFoundException e1) {
         System.out.println(e1.getMessage());
      }
   }
}

class Employee implements Externalizable {
   public Employee(){}
   String name;
   int age;
   public void writeExternal(ObjectOutput out) throws IOException {
      out.writeObject(name);
      out.writeInt(age);
   }
   public void readExternal(ObjectInput in) throws IOException,
   ClassNotFoundException {
      name = (String)in.readObject();
      age = in.readInt();
   }
}

結果如下:

輸出

Reyan Ali
30

更新於: 2020-06-21

1 千+ 瀏覽量

Kickstart Your Career

完成本課程獲得認證

Get Started
廣告
© . All rights reserved.