System.console () versus System.out

1. Inleiding

In deze tutorial onderzoeken we de verschillen tussen System.console () en System.out.

2. System.console ()

Laten we eerst een programma maken om het Troosten voorwerp:

void printConsoleObject () {Console console = System.console (); console.writer (). print (console); }

Als u dit programma vanaf een interactieve terminal uitvoert, krijgt u zoiets als [e-mail beveiligd]

Het uitvoeren van het vanaf andere media zal echter gooien NullPointerException zoals console-object zou zijn nul.

Of, als we het programma uitvoeren zoals hieronder:

$ java ConsoleAndOut> test.txt

dan zal het programma ook een NullPointerException terwijl we de stream omleiden.

De Troosten class biedt ook methoden om wachtwoorden te lezen zonder het karakter te herhalen.

Laten we dat in actie zien:

void readPasswordFromConsole () {Console console = System.console (); char [] wachtwoord = console.readPassword ("Voer wachtwoord in:"); console.printf (String.valueOf (wachtwoord)); }

Dit zal om het wachtwoord vragen, en het zal de tekens niet weergeven terwijl we het typen.

3. System.out

Laten we nu het object van afdrukken System.out:

System.out.println (System.out);

Dit levert zoiets op als java.io.PrintStream.

De uitvoer is overal hetzelfde.

System.out wordt gebruikt om gegevens af te drukken naar de uitvoerstroom en er zijn geen methoden om gegevens te lezen. De uitvoerstroom kan worden omgeleid naar elke bestemming, zoals een bestand, en de uitvoer blijft hetzelfde.

We kunnen het programma uitvoeren als:

$ java ConsoleAndOut> test.txt

Hierdoor wordt de uitvoer naar het test.txt het dossier.

4. Verschillen

Op basis van de voorbeelden kunnen we enkele verschillen identificeren:

  • System.console () geeft een terug java.io.Console bijvoorbeeld wanneer het wordt uitgevoerd vanaf een interactieve terminal - aan de andere kant System.out zal terugkeren java.io.PrintStream object ongeacht het aanroepmedium
  • Het gedrag van System.out en System.console () is vergelijkbaar als we geen streams hebben omgeleid; anders, System.console () geeft terug nul
  • Als meerdere threads om invoer vragen, wordt de Troosten zet die prompts mooi in de wachtrij - terwijl in het geval van System.out alle prompts verschijnen tegelijkertijd

5. Conclusie

We leerden in dit artikel over de verschillen tussen System.console () en System.out. Dat hebben we uitgelegd Troosten is handig als een applicatie verondersteld wordt te draaien vanaf een interactieve console, maar het heeft een aantal eigenaardigheden die opgemerkt en aangepakt moeten worden.

Zoals altijd is de volledige code voor dit artikel beschikbaar op GitHub.