Java - Serializable

 
Vista:

Serializable

Publicado por angel (3 intervenciones) el 04/06/2007 00:59:06
Hola, agradecería un cable porque ya no se que hacer...

tengo una clase que implementa a Serializable. Se que para serializar hace falta que las clases que tenga como atributos sean serializables, y así recursivamente.... pero, ¿que pasa si la clase que contiene no es serializable ni se puede hacer porque no se tiene el fuente o no se puede modificar?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Serializable

Publicado por angel (537 intervenciones) el 04/06/2007 10:50:33
Y si creas tu clase k extienda esa clase dicha e implemente serializable...???....
no tienes k añadirle ninguna funcionalidad nueva..solo..crear la clase nueva e implementar la interfaz.

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serializable

Publicado por Angel (3 intervenciones) el 04/06/2007 11:45:10
Si, si la clase que me interesa serializar tiene atributos simples sirve, el caso es que tiene atributos con clases no serializables, además me parece un poco feo crear una clase que extiende de cada clase que quiero usar.

¿No hay otra solución? no puedo creer que no haya una solución sencilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serializable

Publicado por Gonzalo (180 intervenciones) el 04/06/2007 14:09:42
El asunto es así:

Básicamente una clase es serializable si dice que lo es. Si no dice que lo es, entonces no lo es. No se puede cambiar.

En todo caso, si en tu clase tienes algunos objetos que no son serializables, puedes hacer varias cosas. El resultado final va a ser que esos objetos no los serializas pero serializas el resto.

Lo más fácil, si quieres que un objeto contenido en tu clase no se serialice es declararlo como transient:

transient private Tipo miObjeto;

Así, cuando tu objeto contenedor se serialice, el campo miObjeto no se serializará. Ojo: se ignora completamente; que quiere decir que cuando se deserialice tu objeto, ese campo tampoco se cargará con nada. Tenlo en cuenta para que no ocurran problemas.


La otra posibilidad es (además de declararlo transient) que en lugar de dejar que te serialicen de forma estándar, se encargue tu propia clase de decir cómo debe ser serializada. Para eso implementa estos dos métodos en tu clase:

private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

Se les llamará cuando se quiera escribir o leer, respectivamente, tu objeto. En esos momentos puedes aprovechar por ejemplo para inicializar lo que haga falta que no se deserialice. Es decir podrías hacer algo como:
private void readObject(ObjectInputStream in) throws IOException, ························ClassNotFoundException {
····in.defaultReadObject();
····miObjeto = new Tipo();
}

Si quieres saber más, lee http://java.sun.com/developer/technicalArticles/Programming/serialization/ o busca por ahí algún artículo sobre serialización en Java.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Serializable

Publicado por angel (3 intervenciones) el 04/06/2007 19:08:56
Muchas gracias, super completo, creo que ya se como resolverlo con tus consejos....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar