|
Buscador
Secciones
Otras zonas
Registro
Foros
Recomendamos
|
Inicio > Tutoriales > Nuevo en Java > New 2 Java: Construir una Aplicación: 5.- Escribir Objetos a Ficheros, Usar Arrays y más...
La clase DiveHandler llama al método clearFields después de llamar a los métodos que escriben el objeto en un fichero. Luego, el GUI tiene un botón View que lee el objeto y pone sus valores en los campos. Definimos este método setFields en la clase UIWestPanel donde se crearon los componentes GUI, pero la clase que maneja la funcionalidad (DiveHandler) llama al método donde sea apropiado.
Ya hemos inicializado todos los componentes GUI dentro de la clase UIWestPanel. Además, la clase proporciona los métodos que otras clases pueden llamar para recoger y trabajar con los datos. Esto hará más facil realizar cambios posteriormente, si decidimos añadir un botón u otro campo de texto, o si queremos cambiar el texto de una etiqueta, sabremos exactamente con qué clases trabajar. Si decidimos que necesitamos más funcionalidad, sabemos que tenemos que editar la clase DiveHandler, que maneja los eventos del panel Log Dives. En otras palabras, la arquitectura MVC nos ofrece una forma límpia de organizar nuestro código para que podamos planear una aplicación y hacer los cambios más tarde.
|
| Sigue estos pasos... |
|---|
|
La variable booleana calledAlready se utiliza más adelante para ver si se ha abierto el fichero antes de leer o escribir, y el objeto Vector se utiliza para almacenar cada objeto DiveRecord que se escribe. Entonces se utiliza la variable callIndex para seguir la pista de cuántos objetos se han escrito en el fichero. Por último, se declaran las variables para los streams de entrada y salida.
Leer y Escribir Objetos SerializadosAnteriormente en esta lección, aprendimos cómo serializar objetos y de esta forma hacerlos persistentes en memoria escribiendo el estado del objeto en un stream. El propósito principal de la serialización es escribir los valores de las variables de ejemplar de un objeto. Los objetos pueden almacenar su propio estado en un fichero y luego restaurarlo posteriormente. Ya hemos preparado la clase DiveRecord para su serialización implementando el interface Serializable. Este interface no tiene ningún método que tengamos que implementar en nuestra clase. Simplemente le dice al compilador que la clase DiveRecord participa del protocolo serializable.
Otra forma de escribir objetos a ficheros es usar las clases ObjectInputStream y ObjectOutputStream del paquete java.io. ObjectInputStream se asegura de que los tipos de todos los objetos creados desde el stream corresponden con clases que están presentes en la Máquina Virtual Java. Las clases se cargan cuando es necesario usando los mecanismos estándard.
ObjectInputStreamUn objeto ObjectInputStream puede leer tipos de datos primitivos y representaciones de objetos, y puede deserializar datos primitivos y objetos escritos préviamente usando un objeto ObjectOutputStream.
Envolvemos un objeto ObjectOutputStream alrededor de un objeto InputStream para darle al objeto InputStream subyacente esta funcionalidad:
FileInputStream fis = new FileInputStream("FiletobeRead.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Con este código, se crea un objeto FileInputStream envuelto en el ObjectInputStream.
Leer un objeto es similar a ejecutar los constructores de un nuevo objeto. Se asigna la memoria para el objeto y se inicializa a zero (NULL). Se llama a los constructores sin argumentos de las clases no-serializables, y se restauran los campos de las clases serializables desde el stream empezando con la clase serializable más cercana a java.lang.object y terminando con la clase más específica.
El método readObject se utiliza para leer un objeto desde el stream:
String file = (String) ois.readObject();
ObjectOutputStreamUn ObjectOutputStream escribe tipos de datos primitivos y representaciones de objetos en un OutputStream. Sólo se pueden escribir en los streams los objetos que soporten el interface java.io.Serializable. La clase de cada objeto serializable se codifica, incluyendo el nombre y la firma de la clase, los valores de los campos y arrays del objeto, y la representación de cualquier otro objeto referenciado por el objeto inicial.
Usamos el método writeObject para escribir un objeto en el stream. Cualquier objeto, incluyendo strings y arrays, se escribe con writeObject. El objeto se debe leer desde el correspondiente ObjectInputstream con los mismos tipos y en el mismo orden en que fueron escritos.:
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
El método writeObject es responsable de escribir el estado del objeto para su clase particular para que el correspondiente método readObject pueda restaurarlo.
| Sigue estos pasos... |
|---|
|
Observa que en el código de arriba, también hemos tenido que proporcionar el manejo de excepciones. Si ocurre algún problema, se podría lanzar una IOException. Para que el usuario conozca el problema, se proporcionan objetos JOptionPane con mensajes de texto.
Una vez establecidos los streams de entrada y salida, proporcionamos la funcionalidad de los botones de esta clase controladora. Recuerda que en la clase UIWestPanel, proporcionamos un método get para cada botón. Llamando al método get, creamos un ejemplar de los botones en la clase controladora. Una vez que tenemos un ejemplar del botón con un identificador asignado, podemos hacer lo siguiente:
Ya creamos los identificadores para los botones en la parte superior de DiveHandler, e inicializamos un ejemplar de UIWestPanel para llamar a los métodos get apropiados. Simplemente llamamos al método y le asignamos el identificador del botón apropiado:
| Sigue estos pasos... |
|---|
|
Haremos lo mismo con el otro botón más adelante. Ahora veremos como registar el botón con un oyente.
Clases Internas AnóminasEn lecciones anteriores registramos objetos con oyentes e implementamos el interface en esa clase o en una clase completamente separada. Como DiveHandler es la clase controladora y queremos mantener la funcionalidad en esta clase, podemos:
En la siguiente página aprenderemos cómo utilizar clases internas anónimas.
|
¿La siguiente sentencia es verdadera o falsa?
Las clase anónimas internas se declaran y ejemplarizan al mismo tiempo,usando la palabra clave new con el nombre de la clase o el interface existentes. |
|---|
| Leer comentarios (27) | |
| Escribir comentario | |
| Puntuación: |
|
| Votar | |
| Recomendar este tutorial | |
| Estadísticas |
Copyright © 1999-2007
Programación en castellano.
Todos los derechos reservados.
Formulario de Contacto -
Datos legales -
Publicidad
Hospedaje web y servidores dedicados linux por Ferca Network
red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados