Flujos de datos

prev.gif (997 bytes)chapter.gif (1105 bytes)home.gif (1054 bytes)next.gif (998 bytes)

Entrada/salida

Las jerarquías de clases

Lectura

Escritura


Todos los datos fluyen a través del ordenador desde una entrada hacia una salida. Este flujo de datos se denomina también stream. Hay un flujo de entrada (input stream) que manda los datos desde el exterior (normalmente el teclado) del ordenador, y un flujo de salida (output stream) que dirige los datos hacia los dispositivos de salida (la pantalla o un archivo).

flujo1.gif (2147 bytes) flujo2.gif (2085 bytes)

El proceso para leer o escribir datos consta de tres pasos

 

Las jerarquías de clases

En el lenguaje Java los flujos de datos se describen mediante clases que forman jerarquías según sea el tipo de dato char Unicode de 16 bits o byte de 8 bits. A su vez, las clases se agrupan en jerarquías según sea su función de lectura o de escritura.

La característica de internacionalización del lenguaje Java es la razón por la que existe una jerarquía separada de clases para la lectura y escritura de caracteres.

Todas estas clases se encuentran en el paquete java.io, por lo que al principio del código fuente tendremos que escribir la sentencia

import java.io.*;

char Unicode, 16 bits

jerarquia1.gif (7242 bytes)

byte, 8 bits.

 jerarquia2.gif (8316 bytes)

Reader y Writer son las clases bases de la jerarquía para los flujos de caracteres. Para leer o escribir datos binarios tales como imágenes o sonidos, se emplea otra jerarquía de clases cuyas clases base son InputStream y OutputStream.

 

Lectura

Las clases Reader e InputStream son similares aunque se refieren a distintos tipos de datos, lo mismo ocurre con Writer y OutputSream.

Por ejemplo, Reader proporciona tres métodos para leer un carácter char o un array de caracteres

int read()
int read(char buf[])
int read(char buf[], int offset, int len)

InputStream proporciona métodos similares para leer un byte o un array de bytes.

int read()
int read(byte buf[])
int read(byte buf[], int offset, int len)

La primera versión lee un byte como entero del flujo de entrada, devuelve –1 si no hay más datos que leer. La segunda versión, lee un array de bytes devolviendo el número de bytes leídos. La tercera versión, lee también, un array de bytes, pero nos permite especificar, la posición de comienzo del array en la que se empiezan a guardar los bytes, y el máximo número de bytes que se van a leer.

Dichas clases definen otras funciones miembro que no estudiaremos de momento.

 

Escritura

La clase Writer proporciona tres métodos para escribir un carácter char o un array de caracteres

int write(int c)
int write(char buf[])
int write(char buf[], int offset, int len)

La clase OutputStream proporciona métodos similares

int write(int c)
int write(byte buf[])
int write(byte buf[], int offset, int len)