System.console () vs. System.out

1. Úvod

V tomto tutoriále preskúmame rozdiely medzi nimi System.console () a System.out.

2. System.console ()

Najskôr vytvorme program na načítanie súboru Konzola objekt:

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

Spustenie tohto programu z interaktívneho terminálu spôsobí výstup niečoho podobného [chránené e-mailom]

Jeho spustenie z iných médií však vrhne NullPointerException ako by bol objekt konzoly nulový.

Alebo ak spustíme program uvedený nižšie:

$ java ConsoleAndOut> test.txt

potom program tiež hodí a NullPointerException keď presmerujeme stream.

The Konzola trieda tiež poskytuje metódy na čítanie hesiel bez odrážania znaku.

Pozrime sa na to v akcii:

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

Zobrazí sa výzva na zadanie hesla a pri jeho zadávaní sa nebudú opakovať znaky.

3. System.out

Poďme si teraz vytlačiť objekt System.out:

System.out.println (System.out);

Takto sa vráti niečo ako java.io.PrintStream.

Výstup bude odkiaľkoľvek rovnaký.

System.out sa používa na tlač údajov do výstupného toku a neexistujú žiadne metódy na čítanie údajov. Výstupný prúd je možné presmerovať na ľubovoľné miesto určenia, napríklad do súboru, a výstup zostane rovnaký.

Program môžeme spustiť ako:

$ java ConsoleAndOut> test.txt

Týmto sa výstup vytlačí do súboru test.txt spis.

4. Rozdiely

Na základe príkladov môžeme identifikovať niektoré rozdiely:

  • System.console () vracia a java.io.Console napríklad keď je spustený z interaktívneho terminálu - na druhej strane System.out vráti sa java.io.PrintStream bez ohľadu na vyvolávacie médium
  • Správanie System.out a System.console () je podobný, ak sme nepresmerovali žiadne streamy; inak, System.console () vracia nulový
  • Keď sa zobrazí výzva na zadanie viacerých vlákien, stlačte Konzola pekne zaradí tieto výzvy do poradia - zatiaľ čo v prípade System.out všetky výzvy sa zobrazia súčasne

5. Záver

V tomto článku sme sa dozvedeli o rozdieloch medzi System.console () a System.out. Vysvetlili sme si to Konzola je užitočné, keď sa má aplikácia spúšťať z interaktívnej konzoly, má však určité problémy, ktoré by sa mali zaznamenať a je treba sa o ne starať.

Úplný kód tohto článku je ako vždy k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found