1. Introducción
En este tutorial, exploraremos las diferencias entre System.console () y System.out .
2. System.console ()
Primero creemos un programa para recuperar el objeto Console :
void printConsoleObject() { Console console = System.console(); console.writer().print(console); }
La ejecución de este programa desde una terminal interactiva generará algo como [correo electrónico protegido]
Sin embargo, ejecutarlo desde otros medios arrojará NullPointerException ya que el objeto de la consola sería nulo .
O, si ejecutamos el programa de la siguiente manera:
$ java ConsoleAndOut > test.txt
entonces el programa también lanzará una NullPointerException mientras estamos redirigiendo la secuencia.
La clase Console también proporciona métodos para leer contraseñas sin repetir el carácter.
Veamos eso en acción:
void readPasswordFromConsole() { Console console = System.console(); char[] password = console.readPassword("Enter password: "); console.printf(String.valueOf(password)); }
Esto solicitará la contraseña y no repetirá los caracteres mientras la escribimos.
3. System.out
Imprimamos ahora el objeto de System.out :
System.out.println(System.out);
Esto devolverá algo como java.io.PrintStream.
La salida será la misma desde cualquier lugar.
System.out se utiliza para imprimir datos en el flujo de salida y no hay métodos para leer datos. La secuencia de salida se puede redirigir a cualquier destino, como un archivo, y la salida seguirá siendo la misma.
Podemos ejecutar el programa como:
$ java ConsoleAndOut > test.txt
Esto imprimirá la salida en el archivo test.txt .
4. Diferencias
Basándonos en los ejemplos, podemos identificar algunas diferencias:
- System.console () devuelve una instancia de java.io.Console cuando se ejecuta desde una terminal interactiva; por otro lado, System.out devolverá el objeto java.io.PrintStream independientemente del medio de invocación
- El comportamiento de System.out y System.console () es similar si no hemos redirigido ninguna secuencia; de lo contrario, System.console () devuelve nulo
- Cuando varios subprocesos solicitan una entrada, la consola pone en cola esos mensajes muy bien, mientras que en el caso de System.out, todos los mensajes aparecen simultáneamente
5. Conclusión
Aprendimos en este artículo sobre las diferencias entre System.console () y System.out . Explicamos que Console es útil cuando se supone que una aplicación se ejecuta desde una consola interactiva, pero tiene algunas peculiaridades que deben tenerse en cuenta y cuidarse.
Como siempre, el código completo de este artículo está disponible en GitHub.