Manejo de Entrada y Salida (E/S) en Java: Streams y Ficheros

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,35 KB

Conceptos Fundamentales de Entrada/Salida (E/S) en Java

El conjunto de operaciones que constituyen un flujo de información entre un programa y el exterior se conoce como Entrada/Salida (E/S).

  • Existen dos tipos de E/S: la E/S estándar, que se realiza con el terminal del usuario, y la E/S a través de fichero, en la que se trabaja con ficheros de disco.
  • Todas las operaciones de E/S en Java son proporcionadas por el paquete estándar de la API de Java denominado java.io, el cual incorpora interfaces, clases y excepciones para acceder a todo tipo de ficheros.
  • Para la lectura desde el terminal, ya conocemos los objetos estándar: System.in, System.out y System.err.

El Papel de los Streams en Java

Cualquier programa en Java que necesite realizar una operación de E/S lo hará a través de un stream.

  • Un stream, cuya traducción literal es "flujo", es una abstracción de todo aquello que produce o consume información.
  • Podemos ver este stream como una entidad lógica. La vinculación de este stream al dispositivo físico la realiza el sistema de entrada y salida de Java.
  • La eficacia de esta implementación es evidente, ya que las clases y métodos de E/S que necesitamos emplear son los mismos independientemente del dispositivo con el que estemos actuando. El núcleo de Java sabrá si tiene que tratar con el teclado, el monitor, un sistema de ficheros o un socket de red, liberando a nuestro código de tener que saber con quién está interactuando.

Tipos de Streams

En Java se distinguen dos tipos principales de streams: Byte Streams y Character Streams.

Byte Streams (Flujos de Bytes)

Los Byte Streams proporcionan un medio adecuado para el manejo de entradas y salidas de bytes. Su uso está orientado, lógicamente, a la lectura y escritura de datos binarios. El tratamiento del flujo de bytes está gobernado por dos clases abstractas: InputStream y OutputStream.

  • Cada una de estas clases abstractas tiene varias subclases concretas que controlan las diferencias entre los distintos dispositivos de E/S que se pueden utilizar.
  • Asimismo, estas dos clases son las que definen los métodos que sus subclases implementarán. De entre todos, destacan los métodos read() y write(), que leen y escriben bytes de datos respectivamente.

Character Streams (Flujos de Caracteres)

Los Character Streams proporcionan un medio conveniente para el manejo de entradas y salidas de caracteres. Estos flujos utilizan codificación Unicode y, por tanto, se pueden internacionalizar.

  • Aunque Java proporciona este modo para manejar caracteres, es importante recordar que, al nivel más bajo, todas las operaciones de E/S están orientadas a bytes.
  • Al igual que los flujos de bytes, el flujo de caracteres también está gobernado por dos clases abstractas: Reader y Writer.
  • Dichas clases manejan flujos de caracteres Unicode. De ellas también derivan subclases concretas que implementan los métodos definidos en ellas, siendo los más destacados los métodos read() y write(), que, en este caso, leen y escriben caracteres de datos respectivamente.

Manejo de Ficheros y Tipos de Acceso

En Java es posible utilizar dos tipos de ficheros y dos tipos de acceso a los mismos:

  • Tipos de Ficheros: Se pueden usar ficheros de texto, compuestos de caracteres legibles, o ficheros binarios, que pueden almacenar cualquier tipo de datos (int, float, boolean, etc.).
  • Tipos de Acceso:
    • El acceso secuencial implica tener que acceder a un elemento antes de poder acceder al siguiente, es decir, de una manera lineal y sin saltos.
    • El acceso aleatorio permite acceder a los datos de un fichero de forma no lineal, es decir, indicando una posición específica desde la que leer o escribir.

Entradas relacionadas: