2011-05-16 13 views
1

我正在學習java,並從sun.com學習以下示例。關於理解「UserInfo user1 =(UserInfo)ois.readObject();」的問題

import java.io.*; 
import java.util.*; 

public class UserInfo implements Serializable { 
    String name = null; 

    public UserInfo(String name) { 
    this.name = name; 
} 

public void printInfo() { 
    System.out.println("The name is: "+name); 
} 
} 




import java.io.*; 
import java.util.Date; 

public class ReadInfo { 

public static void main(String argv[]) throws Exception { 
    FileInputStream fis = new FileInputStream("name.out"); 
    ObjectInputStream ois = new ObjectInputStream(fis); 

    UserInfo user1 = (UserInfo) ois.readObject(); 
    UserInfo user2 = (UserInfo) ois.readObject(); 

    user1.printInfo(); 
    user2.printInfo(); 
    ois.close(); 
    fis.close(); 
} 
} 

我有關於ReadInfo.java的問題。具體來說,我不知道如何理解行UserInfo user1 =(UserInfo)ois.readObject()的代碼;特別是,括號中的「UserInfo」的功能是什麼。 (UserInfo)和ols.readObject()之間的關係是什麼?

回答

3

正在讀取對象並將代碼轉換爲UserInfo對象,因爲代碼作者知道「name.out」包含序列化的UserInfo類型對象。

API使這很清楚:

的方法的readObject用於讀取 從流中的對象。應該使用Java的安全 鑄造來獲得所需的類型 。在Java中,字符串和 數組是對象,在序列化過程中被視爲 對象。當 閱讀時,需要將其轉換爲 預期類型。

此外,您可能需要閱讀Java tutorial's section re: Casting Objects

1

具體而言,我不知道 如何理解行代碼的UserInfo USER1 =(的UserInfo)ois.readObject(); 特別是,括號中的「UserInfo」的功能 是什麼。

ObjectInputStream.readObject()回報Object,不UserInfo,所以它必須被強制轉換爲UserInfo