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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP