bloque3:serializable
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| bloque3:serializable [04/04/2019 06:56] – [Serial Version UID] Fernando Valdeón | bloque3:serializable [16/09/2024 20:53] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 7: | Línea 7: | ||
| Java ofrece un mecanismo llamado serialización de objetos, mediante el cual un objeto puede ser representado por una secuencia de //bytes// que incluye tanto los datos del objeto, como el tipo del objeto y los tipos de los datos que contiene ese objeto. | Java ofrece un mecanismo llamado serialización de objetos, mediante el cual un objeto puede ser representado por una secuencia de //bytes// que incluye tanto los datos del objeto, como el tipo del objeto y los tipos de los datos que contiene ese objeto. | ||
| - | Gracias a esto podemos guardar un objeto en fichero o enviarlo por la red, y permite posteriormente leer esos bytes para reconstruir el objeto y su estado en la memoria de nuevo. Además puede ser serializado en una máquina y deserializado en otra máquina distinta. | + | Gracias a esto podemos guardar |
| - | Para que un objeto sea serializable debe implementar la interface Serializable. | + | Para que un objeto sea serializable debe implementar la interface |
| Hay que tener en cuenta que, para poder traducir un objeto a bytes de forma correcta, __todos los objetos que lo componen deben ser serializables__. | Hay que tener en cuenta que, para poder traducir un objeto a bytes de forma correcta, __todos los objetos que lo componen deben ser serializables__. | ||
| + | |||
| + | **Los miembros estáticos de una clase, no son parte del estado de un objeto (sino de la clase) y no permiten ser serializados.** | ||
| La mayoría de las clases de la [[https:// | La mayoría de las clases de la [[https:// | ||
| Línea 60: | Línea 62: | ||
| File fichero = new File(" | File fichero = new File(" | ||
| FileOutputStream flujoFichero = new FileOutputStream(fichero); | FileOutputStream flujoFichero = new FileOutputStream(fichero); | ||
| - | ObjectOutputStream | + | ObjectOutputStream |
| </ | </ | ||
| Línea 70: | Línea 72: | ||
| // Escribir objetos en el fichero | // Escribir objetos en el fichero | ||
| - | flujoObjetos.writeObject(" | + | serializador.writeObject(" |
| - | flujoObjetos.writeObject(miCoche1); | + | serializador.writeObject(miCoche1); |
| - | flujoObjetos.writeObject(miCoche2); | + | serializador.writeObject(miCoche2); |
| . . . | . . . | ||
| - | flujoObjetos.close(); // Finalmente se cierran los flujos de salida, cerrando el más externo. | + | serializador.close(); // Finalmente se cierran los flujos de salida, cerrando el más externo. |
| </ | </ | ||
| Línea 88: | Línea 90: | ||
| File fichero = new File(" | File fichero = new File(" | ||
| FileInputStream flujoFichero = new FileInputStream(fichero); | FileInputStream flujoFichero = new FileInputStream(fichero); | ||
| - | ObjectInputStream | + | ObjectInputStream |
| // Leer el objeto del fichero (en el mismo orden !!) | // Leer el objeto del fichero (en el mismo orden !!) | ||
| String cadena = (String) flujoObjetos.readObject(); | String cadena = (String) flujoObjetos.readObject(); | ||
| - | Coche cocheLeido1 = (Coche) | + | Coche cocheLeido1 = (Coche) |
| - | Coche cocheLeido2 = (Coche) | + | Coche cocheLeido2 = (Coche) |
| - | flujoObjetos.close(); | + | deserializador.close(); |
| </ | </ | ||
| Línea 104: | Línea 106: | ||
| En el caso de lectura de listas de objetos, nuestro programa no puede asegurar de ninguna forma que los bytes que lee del fichero son los tipos de datos que nosotros le indicamos: | En el caso de lectura de listas de objetos, nuestro programa no puede asegurar de ninguna forma que los bytes que lee del fichero son los tipos de datos que nosotros le indicamos: | ||
| <code java> | <code java> | ||
| - | ArrayList< | + | ArrayList< |
| </ | </ | ||
| Aunque nosotros sepamos que se lee lo correcto no hay forma de que Java "lo sepa". Podríamos cambiar el fichero, y no leer el objeto que esperamos leer. | Aunque nosotros sepamos que se lee lo correcto no hay forma de que Java "lo sepa". Podríamos cambiar el fichero, y no leer el objeto que esperamos leer. | ||
bloque3/serializable.1554360965.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)
