程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 尋找類

尋找類

編輯:關於JAVA

讀者或許會奇怪為什麼需要一個對象從它的序列化狀態中恢復。舉個例子來說,假定我們序列化一個對象,並通過網絡將其作為文件傳送給另一台機器。此時,位於另一台機器的程序可以只用文件目錄來重新構造這個對象嗎?
回答這個問題的最好方法就是做一個實驗。下面這個文件位於本章的子目錄下:
 

//: Alien.java
// A serializable class
import java.io.*;

public class Alien implements Serializable {
} ///:~


用於創建和序列化一個Alien對象的文件位於相同的目錄下:
 

//: FreezeAlien.java
// Create a serialized output file
import java.io.*;

public class FreezeAlien {
  public static void main(String[] args) 
      throws Exception {
    ObjectOutput out = 
      new ObjectOutputStream(
        new FileOutputStream("file.x"));
    Alien zorcon = new Alien();
    out.writeObject(zorcon); 
  }
} ///:~


該程序並不是捕獲和控制違例,而是將違例簡單、直接地傳遞到main()外部,這樣便能在命令行報告它們。
程序編譯並運行後,將結果產生的file.x復制到名為xfiles的子目錄,代碼如下:
 

//: ThawAlien.java
// Try to recover a serialized file without the 
// class of object that's stored in that file.
package c10.xfiles;
import java.io.*;

public class ThawAlien {
  public static void main(String[] args) 
      throws Exception {
    ObjectInputStream in =
      new ObjectInputStream(
        new FileInputStream("file.x"));
    Object mystery = in.readObject();
    System.out.println(
      mystery.getClass().toString());
  }
} ///:~

該程序能打開文件,並成功讀取mystery對象中的內容。然而,一旦嘗試查找與對象有關的任何資料——這要求Alien的Class對象——Java虛擬機(JVM)便找不到Alien.class(除非它正好在類路徑內,而本例理應相反)。這樣就會得到一個名叫ClassNotFoundException的違例(同樣地,若非能夠校驗Alien存在的證據,否則它等於消失)。
恢復了一個序列化的對象後,如果想對其做更多的事情,必須保證JVM能在本地類路徑或者因特網的其他什麼地方找到相關的.class文件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved