gpt4 book ai didi

java - 等效于 ObjectOutputStream,不仅保存其状态而且保存整个对象?

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:20 24 4
gpt4 key购买 nike

我让用户使用 URLClassLoader 从远程位置导入类似插件的类,因此这些导入的类不存在于构建路径中(但是,它们都实现了一个接口(interface) 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 的东西,但能够在本地下载和缓存 jars。您可能想看看扩展 URLClassLoader 或实现类似的东西。您基本上只需要连接到下载 jar 的部分并将其粘贴到本地某处(或者如果您之前已经下载过它,则从该缓存位置加载它)。

关于java - 等效于 ObjectOutputStream,不仅保存其状态而且保存整个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com