繁体   English   中英

等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?

[英]Equivalent of ObjectOutputStream, saving not only its state but the whole object?

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

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

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

ObjectOutputStream oos = new ObjectOutputStream(*fileoutputstream*);
oos.writeObject(activePlugins);
oos.close();

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

ObjectInputStream ois = new ObjectInputStream(*fileinputstream*);
activePlugins = (ArrayList<IPlugin>) ois.readObject();

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

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

看看RMI。 这通过类传递机制扩展了序列化,因此您可以很好地序列化(反序列化)(在接收器处)未知类的对象,并执行其方法。

我认为这是使用某种远程类加载机制完成的。

Altought Java不是我的主要编程框架,我在其他“框架”(例如PHP,Delphi和C#)中也遇到了相同的问题。

一种解决方案是声明类文件和路径。

另一个建议是,既然您已经熟练掌握了,那么您就不必关心逻辑(仅“数据”)状态,可以声明一个通用类来存储属性的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM