Buffer Prácticas de EDI Juan Ramón Pérez Pérez. Buffer Prácticas EDI - © Juan Ramón Pérez2 ...
-
Upload
andres-piedrahita -
Category
Documents
-
view
220 -
download
0
Transcript of Buffer Prácticas de EDI Juan Ramón Pérez Pérez. Buffer Prácticas EDI - © Juan Ramón Pérez2 ...
Buffer
Prácticas de EDIJuan Ramón Pérez Pérez
Buffer
Prácticas EDI - © Juan Ramón Pérez2
Clase que hace de intermediaria entre el fichero y el resto de las clases de nuestra aplicación. Lectura de bloques de caracteres Almacenar bloques en un array (buffer) de tamaño fijo Permite el procesamiento carácter a carácter Permitir tratamiento correcto de caracteres
acentuados y eñes. Debe permitir al resto de las clases, leer
(obtener) carácter a carácter todo el fichero. Debe permitir deshacer la operación obtener.
Clase Buffer
Prácticas EDI - © Juan Ramón Pérez3
Buffer
vector: caracter []InputStreamReaderTAM_BUFFER= 100cursor: enterocargarBuffer()
create(URL)obtenerCaracter(): carácterretroceder()esFinal(): boolean
Constructor
Undo de obtenerCaracter()
Elegir el stream adecuado según
requisitos
obtenerCaracter()
Prácticas EDI - © Juan Ramón Pérez4
< B a s e d a t o
obtenerCaracter()
cargarBuffer()
:Buffer :InputStream
read()Carácter: “<“
devuelve: <
Si no hay caracteres para devolver
Se llama al principio o cada vez que lleguemos al final del Buffer
Se carga por bloques de caracteres
retroceder()
Prácticas EDI - © Juan Ramón Pérez5
< B a s e d a t o
:Buffer
retroceder()
esFinal()
Prácticas EDI - © Juan Ramón Pérez6
Devuelve true cuando el buffer ya no pueda devolver más caracteres. Es decir, hemos llegado al último carácter leído del Buffer y ya hemos leído todo el fichero.
Devuelve false en cualquier otro caso. ¡Ojo!
La clase que utiliza el buffer no se tiene que enterar de que el buffer se tiene que recargar porque llegue al final, esto es un proceso interno al buffer.
a t o s > ? ? ? ?
Resolver situaciones conflictivas
Prácticas EDI - © Juan Ramón Pérez7
¿Qué pasa si estamos al final del vector del Buffer y llaman a obtenerCaracter()?
¿Qué pasa si estamos al principio del vector y llaman a retroceder()? Si acabamos de hacer la carga del primer
bloque del fichero. Si acabamos de cargar un bloque intermedio del
fichero. Algunas de estas situaciones provocarán
un error que no se puede resolver en la propia clase …
Tratamiento de errores mediante excepciones
Prácticas EDI - © Juan Ramón Pérez8
Excepciones: mecanismo eficiente y seguro de comunicación de situaciones de error entre clases.
Tipos de clases: Sólo determinadas clases se encargarán de la
interacción con el usuario. La mayoría de las clases resolverán las tareas
encomendadas.
Tratamiento de errores mediante excepciones
Prácticas EDI - © Juan Ramón Pérez9
Si surge algún error en las clases internas, que no se pueda tratar en la propia clase, se pasará a la clase llamadora mediante excepciones.
Si ninguna clase intermedia pudo tratar el error, la clase de interfaz notificará el error al usuario de la manera más adecuada.
Esquema del tratamiento de errores
Prácticas EDI - © Juan Ramón Pérez10
InterfazClases internas
:Principal:UnBuffe
r
ExcepciónTratamiento
interno
ExcepciónNo tratada
Esquema del tratamiento de errores (con clases intermedias)
Prácticas EDI - © Juan Ramón Pérez11
InterfazClases internas
:Principal:UnBuffer
:UnaClaseIntermedia
Excepción ExcepcionAnalisis
Prácticas EDI - © Juan Ramón Pérez12
ExcepcionAnalisis
TipoError: (buffer, …)Codigo: entero
create(String mensaje, TipoError, codigo);
getTipoError(): TìpoError;getCodigo(): entero
java.lang.Exception
Tareas
Prácticas EDI - © Juan Ramón Pérez13
Finalizar el diseño de la clase Buffer para que cumpla los requisitos pedidos.
Implementar métodos públicos y privados de la clase Buffer.
Implementar clase Excepción Utilizar clase Excepción en el buffer. Crear una clase de prueba para buffer:
PruebaBuffer.