|
Externalizable接口繼承了Serializable接口,用來(lái)在序列化時(shí)手動(dòng)的把需要的對象信息進(jìn)行序列化。 Externalizable接口提供了兩個(gè)方法:writeExternal(ObjectOuput out) 和 readExternal(ObjectInput in) 在你需要被序列化的類(lèi)中實(shí)現這兩個(gè)方法,這樣在此類(lèi)序列化時(shí)這兩個(gè)方法將被自動(dòng)執行,用以可定制地序列化此類(lèi)。舉例如下: 假如你需要序列化一個(gè)類(lèi)Test: import java.io.*;
class Test implements Externalizable{ //Test類(lèi)必須實(shí)現Externalizable接口 private String letterstates = "fanruijun"; private int num = 0; public Test(){ } public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(letterstates); out.write(88); //在序列化的數據最后加個(gè)88 }
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { letterstates = (String)in.readObject(); num = in.read(); //把數字88加進(jìn)來(lái) } public void putOut(){ //測試 System.out.println(letterstates +num); } }
序列化上面的Test類(lèi):AppTest
import java.io.*;
public class AppTest {
private void saveGame(){ Test m = new Test(); if (m != null){ try{ FileOutputStream ostream = new FileOutputStream("t.txt"); ObjectOutputStream p = new ObjectOutputStream(ostream);
p.writeObject(m); //writeExternal()自動(dòng)執行
p.flush(); ostream.close(); } catch (IOException ioe) { System.out.println ("Error saving file:"); System.out.println (ioe.getMessage()); } } }
private void loadGame(){ try{ FileInputStream instream = new FileInputStream("t.txt"); ObjectInputStream p = new ObjectInputStream(instream); Test m = (Test)p.readObject();//readExternal()自動(dòng)執行 m.putOut(); instream.close(); } catch (Exception e) { System.out.println ("Error loading file:"); System.out.println (e.getMessage()); } }
public static void main(String[] args){ new AppTest().saveGame(); new AppTest().loadGame(); } }
運行結果: D:\test\basic>javac AppTest.java
D:\test\basic>javac Test.java
D:\test\basic>java AppTest fanruijun88
|