2011-05-16 14 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