通过序列化在应用程序之间传输 Java 类

Pav*_*sov 0 java serialization

我已经成功地序列化了Ghost:

class Ghost {}

File file = new File("serialized.class.bin");
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(Ghost.class);
Run Code Online (Sandbox Code Playgroud)

然后我试图在不同的应用程序中恢复它:

InputStream is = new FileInputStream(new File("serialized.class.bin"));
ObjectInputStream ois = new ObjectInputStream(is);
Object o = ois.readObject();
Run Code Online (Sandbox Code Playgroud)

我在(尝试)加载类时遇到错误:

java.lang.ClassNotFoundException: Ghost
Run Code Online (Sandbox Code Playgroud)

Ghost.class反序列化类时我可能无法访问文件。是否可以以这种方式传输 Java 类?

更新。我假设在序列化类时正在转储类定义(字节码)。我错了。虽然可以通过getResourceAsStream()达到目标。

Ian*_*rts 5

序列化一个Class对象只是存储对类名的引用,它实际上并不存储类的字节码(嗯,它比实际中的稍微复杂一些,但效果是一样的)。在反序列化时,它ObjectInputStream会尝试从自己的类加载器中按名称加载类,因此该类需要已经可以通过该类加载器访问。

  • 哇哦?序列化一个类实际上并没有序列化这个类?这是我今天学到的有用的东西。 (3认同)