Apéndice E Streams


Apéndice E Streams

Las operaciones de entrada y salida nunca formaron parte de C ni tampoco lo forman de C++. En ambos lenguajes, todas las operaciones de entrada y salida se hacen mediante bibliotecas externas.
En el caso de C, esa biblioteca es stdio, que agrupa todas las funciones de entrada y salida desde teclado, pantalla y ficheros de disco. En el caso de C++ se dispone de varias clases: streambuf, ios, istream, ostream y fstream.

Dejar fuera del lenguaje todas las operaciones de entrada y salida tiene varias ventajas:

1-Independencia de la plataforma: cada compilador dispone de diferentes versiones de cada biblioteca para cada plataforma. Tan sólo se cambia la definición de las clases y bibliotecas, pero la estructura, parámetros y valores de retorno son iguales. Los mismos programas, compilados para diferentes plataformas funcionan del mismo modo.

2-Encapsulación: para el programa todos los dispositivos son de entrada y salida se tratan del mismo modo, es indiferente usar la pantalla, el teclado o ficheros.
 
3-Buffering: el acceso a dispositivos físicos es lento, en comparación con el acceso a memoria. Las operaciones de lectura y escritura se agrupan, haciéndolas en memoria, y las operaciones físicas se hacen por grupos o bloques, lo cual ahorra mucho tiempo.
 
Clases predefinidas para streams

Un stream es una abstracción para referirse a cualquier flujo de datos entre una fuente y un destinatario. Los streams se encargan de convertir cualquier tipo de objeto a texto legible por el usuario, y viceversa. Pero no se limitan a eso, también pueden hacer manipulaciones binarias de los objetos y cambiar la apariencia y el formato en que se muestra la salida.

C++ declara varias clases estándar para el manejo de streams:

-streambuf: manipulación de buffers.
-ios: entradas y salidas, incluye en su definición un objeto de la clase streambuf.
-istream: derivada de ios, clase especializada en entradas.
-ostream: derivada de ios, clase especializada en salidas.
-iostream: derivada de istream y ostream, se encarga de encapsular las funciones de entrada y salida por teclado y pantalla.
-fstream: entrada y salida desde ficheros.
 
Las clases base son streambuf e ios, las demás se derivan de estas dos.
 
La clase streambuf proporciona un interfaz entre la memoria y los dispositivos físicos.

 

La clase ios contiene además un puntero a un objeto de la clase streambuf. Proporciona soporte para entradas y salidas con validación y formato usando un streambuf.