## Los Canales de I/O Estandard

Los conceptos de los canales de I/O estandard son un concepto de la librería C que ha sido asimilado dentro del entorno Java. Existen tres canales estandard, todos los cuales son manejados por la clase java.lang.System:

Entrada estandard --referenciado por System.in
  utilizado para la entrada del programa, típicamente lee la entrada introducida por el usuario.
Salida estandard --referenciado por System.out
  utilizado para la salida del programa, típicamente muestra información al usuario.
Error estandard --referenciado por System.err
  utilizado para mostrar mensajes de error al usuario.

### Canal de Entrada Estandard

> La clase System proporciona un canal para leer texto -- el canal de entrada estandard. El programa de ejemplo de Tuercas y Tornillos del Lenguaje Java utiliza el canal del entrada estandard para contar los caracteres tecleados por el usuario.

### Los Canales de Salida y de Error Estandards

> Probablemente los puntos más utilizados de la clase System sean los canales de salida y de error estandard, que se utilizan para mostrarle texto al usuario.

> El canal de salida estandard se utiliza normalmente para las salidas de comandos, esto es, para mostrar el resultado de un comando del usuario. El canal de error estandard se utiliza para mostrar cualquier error que ocurra durante la ejecución del programa.

### Los métodos print(), println(), y write()

> Tanto la salida estandard como el error estandard derivan de la clase PrintStream. Así, se utiliza uno de los tres métodos de PrintStream para imprimir el texto en el canal: print(), println(), y write().

> Los métodos print() y println() son esencialmente el mismo: los dos escriben su argumento String en el canal. La única diferencia entre estos dos métodos es que println() añade un carácter de nueva línea al final de la salida, y print() no lo hace. En otras palabras, esto

>     System.out.print("Duke no es un Pingüino!\n");

es equivalente a esto

    System.out.println("Duke no es un Pingüino!");

Observa el carácter extra \n en la llamada al primer método; es el carácter para nueva línea. println() añade automáticamente este carácter a su salida.

El método write() es menos utilizado que los anteriores y se utiliza para escribir bytes en un canal. write() se utiliza para escribir datos que no sean ASCII.

### Argumentos para print() y println()

> Los métodos print() y println() toman un sólo argumento. Este argumento puede ser cualquiera de los siguientes tipos: Object, String, char[], int, long, float, double, y boolean. Además existe una versión extra de println() que no tiene argumentos que imprime una nueva línea en el canal.

### Imprimir Objetos de Diferentes Tipos de Datos

> El siguiente programa utiliza println() para sacar datos de varios tipos por el canal de salida estandard.

>     class DataTypePrintTest {
>         public static void main(String[] args) {

>             Thread objectData = new Thread();
>             String stringData = "Java Mania";
>             char[] charArrayData = { 'a', 'b', 'c' };
>             int integerData = 4;
>             long longData = Long.MIN_VALUE;
>             float floatData = Float.MAX_VALUE;
>             double doubleData = Math.PI;
>             boolean booleanData = true;

>             System.out.println(objectData);
>             System.out.println(stringData);
>             System.out.println(charArrayData);
>             System.out.println(integerData);
>             System.out.println(longData);
>             System.out.println(floatData);
>             System.out.println(doubleData);
>             System.out.println(booleanData);
>         }
>     }

> El programa anterior tendría esta salida:

>     Thread[Thread-4,5,main]
>     Java Mania
>     abc
>     4
>     -9223372036854775808
>     3.40282e+38
>     3.14159
>     true

> Observa que se puede imprimir un objeto -- el primer println() imprime un objeto Thread y el segundo imprime un objeto String. Caundo se utilice print() o println() para imprimir un objeto, los datos impresos dependen del tipo del objeto. En el ejemplo, imprimir un String muestra el contenido de la cadena. Sin embargo, imprimir un Thread muestra una cadena con este formato:

>     ThreadClass[nombre,prioridad,grupo]

Ozito