ObjectOutputStream的等价物,不仅保存了它的状态,还保存了整个对象?

Joh*_*tam 5 java serialization classloader

我让用户使用URLClassLoader从远程位置导入类似插件的类,因此这些导入的类不存在于构建路径中(但是,它们都实现了包含的接口IPlugin).

我假设可以简单地使用ObjectOutputStream将所有加载的插件保存到文件中,然后使用ObjectInputStream读取它们.但这似乎并非如此,因为它保存的只是对象的状态,而不是包含逻辑(即方法).

我希望做的是使用ObjectOutputStream保存加载的插件列表(activePlugins):

ObjectOutputStream oos = new ObjectOutputStream(*fileoutputstream*);
oos.writeObject(activePlugins);
oos.close();
Run Code Online (Sandbox Code Playgroud)

然后在另一个运行时,使用ObjectInputStream加载/恢复所有这些插件:

ObjectInputStream ois = new ObjectInputStream(*fileinputstream*);
activePlugins = (ArrayList<IPlugin>) ois.readObject();
Run Code Online (Sandbox Code Playgroud)

但是由于实际的对象类在构建路径中不可用(它们位于硬盘驱动器上的其他位置),因此它会变得混乱.我所追求的是在没有类可用的情况下加载对象的某种方式,即加载具有状态且没有依赖关系的对象.

jta*_*orn 4

你需要你自己的类加载器。您基本上想要类似于 URLClassLoader 的东西,但能够在本地下载和缓存 jar。您可能想考虑扩展 URLClassLoader 或实现类似的东西。您基本上只需要挂接到下载 jar 的部分并将其粘贴到本地某个位置(或者如果您之前已经下载过它,则从该缓存位置加载它)。

  • 我已经看了这个问题几分钟了。一开始我无法理解这个问题,因为他既谈论状态又谈论方法。我认为听起来他实际上都想要一个自定义类加载器(NetworkClassLoader)和ObjectOutputStream。听起来他想保存插件的状态,而不仅仅是插件。或者我现在完全不在地图上了? (2认同)