Estoy dejando que el usuario importe clases similares a un complemento desde una ubicación remota utilizando URLClassLoader, por lo que estas clases importadas NO existen en la ruta de compilación (sin embargo, todas implementan una interfaz IPlugin que se incluye).¿Equivalente a ObjectOutputStream, guardando no solo su estado sino el objeto completo?
Supuse que uno podría simplemente usar ObjectOutputStream para guardar todos los complementos cargados en el archivo, y luego leerlos con ObjectInputStream. Sin embargo, ese no parece ser el caso, ya que todo lo que guarda es el estado del objeto, no la lógica que lo contiene (es decir, los métodos).
Lo que me espero que hacer es guardar la lista de plugins cargados (activePlugins) con ObjectOutputStream:
ObjectOutputStream oos = new ObjectOutputStream(*fileoutputstream*);
oos.writeObject(activePlugins);
oos.close();
A continuación, en otro tiempo de ejecución, carga/restaurar todos estos complementos con ObjectInputStream:
ObjectInputStream ois = new ObjectInputStream(*fileinputstream*);
activePlugins = (ArrayList<IPlugin>) ois.readObject();
Pero dado que las clases de objeto reales no están disponibles en la ruta de compilación (están en otro lugar en el disco duro), se vuelve loco. Lo que busco es una forma de cargar objetos sin tener las clases disponibles, es decir, cargar objetos con estados y sin dependencias.
También debe serializar los bytes de la clase en la transmisión. Puede obtener los bytes de la clase a través de 'getResourceAsStream'. Luego, en el otro lado, use estos bytes para cargar clases en un cargador de clases personalizado, luego aplique la clase resultante a su interfaz y use el objeto a través de su interfaz. – MeBigFatGuy