关于理解的问题“UserInfo user1 =(UserInfo)ois.readObject();”

时间:2011-05-16 15:16:18

标签: java casting

我正在学习java,并从sun.com学习以下示例。

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()之间的关系是什么。

2 个答案:

答案 0 :(得分:3)

正在读取Object并且代码将其转换为UserInfo对象,因为代码作者有一些知识,“name.out”包含UserInfo类型的序列化对象。

API非常清楚:

  

方法readObject用于读取   来自流的对象。 Java是安全的   铸造应该用来获得   期望的类型。在Java,字符串和   数组是对象,被视为对象   序列化过程中的对象。什么时候   阅读他们需要被投射到   期望的类型。

此外,您可能希望阅读Java tutorial's section re: Casting Objects

答案 1 :(得分:1)

  

具体来说,我不知道该怎么做   理解UserInfo行的代码   user1 =(UserInfo)ois.readObject();   特别是,功能是什么   括号中的“UserInfo”。

ObjectInputStream.readObject()返回Object,而不是UserInfo,因此必须将其投放到UserInfo