El paquete io contiene el
sistema básico de E/S
(entradas/salidas) de Java,
incluyendo la E/S con
archivos. La gestión de las E/S
se realiza mediante
bibliotecas del API de Java, y
no mediante palabras
reservadas del lenguaje.
La E/S por consola es bastante limitada y
engorrosa incluso en programas sencillos.
Por todo ello, la E/S basada en texto por
consola no es muy importante en la
programación en Java.
Los unicos metodos de E/S que hemos usado son los métodos
print( ) y println( ), no se ha usado de manera significativa
ningún otro de los métodos de E/S. La razón es simple y es
que en la mayor parte de las aplicaciones reales de Java no se
utilizan programas cuya salida sea basada en texto por
consola, sino que son aplicaciones gráficas que basan su
interacción con el usuario en un conjunto de herramientas
gráficas denominado AWT (por sus siglas en inglés, Abstract
Window Toolkit) o Swing.
Flujo
Los programas en Java realizan las E/S a través de
flujos. Un flujo es una abstracción de una entidad que
produce o consume información. Un flujo está ligado a
un dispositivo físico por el sistema de E/S de Java.
Todos los flujos se comportan de igual manera, incluso
en el caso de que los dispositivos físicos reales a los
que están ligados sean diferentes.
Flujos de bytes y flujos de caracteres
Java define dos tipos de flujos: de bytes y de caracteres. Los
flujos de bytes proporcionan un medio conveniente para
gestionar la entrada y salida de bytes. Los flujos de bytes se
utilizan, por ejemplo, cuando se escriben o leen datos
binarios. Los flujos de caracteres, por el contrario, son
adecuados para gestionar la entrada y salida de caracteres.
Utilizan el código Unicode y, por lo tanto, se pueden utilizar
internacionalmente. En algunos casos, los flujos de
caracteres pueden ser más eficientes que los flujos de
bytes.
Las clases de flujos de bytes
Los flujos de bytes se definen mediante dos
jerarquías de clases. En el nivel superior hay dos
clases abstractas: InputStream y OutputStream. Cada
una de estas clases abstractas tiene varias subclases
no abstractas que gestionan las diferencias entre los
diversos dispositivos tales como, archivos de disco,
conexiones de red, e incluso espacios de memoria.
Las clases de flujos de caracteres
Los flujos de caracteres se definen mediante
dos jerarquías de clases. En el nivel más alto
se encuentran las clases abstractas, Reader y
Writer. Estas clases gestionan el flujo de
caracteres Unicode. Java define varias
subclases de estas dos clases.
Flujo Predefinido
todos los programas de Java importan automáticamente
el paquete java.lang. Este paquete define una clase
denominada System, que encapsula algunos aspectos del
entorno de ejecución. Por ejemplo, utilizando algunos de
sus métodos, se puede obtener la hora actual o los
valores de diversas propiedades asociadas al sistema.
System también contiene tres variables con flujos
predefinidos: in, out y err. Estos campos se declaran
como public, static y final en la clase System. Esto
significa que pueden ser utilizadas por cualquier parte
del programa sin necesidad de una referencia a un objeto
específico de tipo System.