寻找类

读者或许会奇怪将一个对象从它的序列化状态中恢复出来有哪些工作是必须的呢?举个例
子来说,假如我们将一个对象序列化,并通过网络将其作为文件传送给另一台计算机。那么,
另一台计算机上的程序可以只利用该文件内容来重组这个对象吗?


回答这个问题的最好方法就是做一个实验。下面这个文件位于本章的子目录下:


//: c12:Alien.java
// A serializable class.
import java.io.*;
public class Alien implements Serializable {} ///:~
用于创建和序列化一个 Alien 对象的文件位于相同的目录下:


//: c12:FreezeAlien.java
// Create a serialized output file.
// {Clean: X.file}
import java.io.*;


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


这个程序不但能捕获和处理异常,而且将异常抛出到 main()方法之外,以便通过控制台
产生报告。


一旦该程序被编译和运行,它就会在 c12 目录下产生一个名为 X.file 的文件。以下代码位
于一个名为 xfiles 的子目录下


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


public class ThawAlien {
    public static void main(String[] args) throws Exception {
    ObjectInputStream in = new ObjectInputStream(
      new FileInputStream(new File("..", "X.file")));
    Object mystery = in.readObject();
    System.out.println(mystery.getClass());
    } 
} ///:~
打开文件和读取 mystery 对象中的内容都需要 Alien 的 Class 对象;而 Java 虚拟机(JVM)
找不到 Alien.class(除非它正好在类路径内,而本例却不在类路径之内)。这样就会得到一
个名叫 ClassNotFoundException 的异常(同样地,除非能够验证 Alien 存在,否则它等

于消失)。必须保证 Java 虚拟机(JVM)能找到相关的.class 文件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值