itsource

콘솔로 이동합니다.writline 및 System.out.println

mycopycode 2022. 9. 14. 22:26
반응형

콘솔로 이동합니다.writline 및 System.out.println

의 기술적 차이는 정확히 무엇입니까?console.writeline그리고.System.out.println알고 있어System.out.println표준 출력에 쓰지만 콘솔과 동일하지 않습니까?

에 대한 문서를 완전히 이해하지 못했습니다.console.writeline.

다음은 // .err.in와의 주요 차이점입니다.

  • System.console()응용 프로그램이 단말기에서 실행되지 않으면 null을 반환합니다(, 응용 프로그램에서 이 작업을 처리할 수 있습니다).
  • System.console()에 문자를 에코하지 않고 패스워드를 읽는 방법을 나타냅니다.
  • System.out그리고.System.err디폴트 플랫폼 부호화를 사용하여Consoleclass 출력 메서드는 콘솔 부호화를 사용합니다.

후자의 동작은 즉시 명확하지 않을 수 있지만 다음과 같은 코드로 차이를 나타낼 수 있습니다.

public class ConsoleDemo {
  public static void main(String[] args) {
    String[] data = { "\u250C\u2500\u2500\u2500\u2500\u2500\u2510", 
        "\u2502Hello\u2502",
        "\u2514\u2500\u2500\u2500\u2500\u2500\u2518" };
    for (String s : data) {
      System.out.println(s);
    }
    for (String s : data) {
      System.console().writer().println(s);
    }
  }
}

Windows-1252의 시스템 인코딩과 IBM850의 기본 콘솔 인코딩을 사용하는 Windows XP에서는 이 코드가 다음과 같이 기록됩니다.

???????
?Hello?
???????
┌─────┐
│Hello│
└─────┘

이 동작은 콘솔인코딩이 시스템인코딩과 다른 인코딩으로 설정되어 있는지 여부에 따라 달라집니다.이것은, 많은 이력상의 이유로, Windows 에서의 디폴트 동작입니다.

프로그램이 대화형 프롬프트에서 실행되고 stdin 또는 stdout을 리디렉션하지 않은 경우 기본적으로 동일합니다.

public class ConsoleTest {
    public static void main(String[] args) {
        System.out.println("Console is: " + System.console());
    }
}

결과는 다음과 같습니다.

$ java ConsoleTest
Console is: java.io.Console@2747ee05
$ java ConsoleTest </dev/null
Console is: null
$ java ConsoleTest | cat
Console is: null

이유Consoleexists는 인터랙티브명령줄에서 실행되는 특정 경우에 도움이 되는 기능을 제공하는 것입니다.

  • 시큐어 패스워드 입력(크로스 플랫폼 실행이 어려움)
  • synchronization(유효한 스레드는 입력을 요구할 수 있으며,ConsoleSystem.in/out 를 사용하면 모든 프롬프트가 동시에 표시됩니다).

위의 점에 주의해 주십시오.스트림을 1개라도 리다이렉트하면System.console()돌아오는null; 또 다른 짜증나는 것은 종종,Console개체는 Eclipse 또는 Maven과 같은 다른 프로그램에서 생성된 경우 사용할 수 있습니다.

우선 당신의 질문에 약간의 실수가 포함되어 있는 것 같습니다.클래스 콘솔에 메서드 쓰기 행이 없습니다.대신 Console 클래스는 PrintWriter를 반환하는 메서드 writer()를 제공합니다.이 프린트 라이터에는 println()이 있습니다.

자, 이제 두 가지 차이점이 뭐죠?

System.console().writer().println("hello from console");

그리고.

System.out.println("hello system out");

명령줄에서 어플리케이션을 실행해도 별 차이가 없다고 생각합니다.그러나 콘솔을 사용할 수 없는 경우 System.console()은 null을 반환하고 System은 null을 반환합니다.out은 아직 존재합니다.응용 프로그램을 호출하고 STDOUT를 파일로 리디렉션하면 이 문제가 발생할 수 있습니다.

여기 제가 방금 구현한 예가 있습니다.

import java.io.Console;


public class TestConsole {
    public static void main(String[] args) {
        Console console = System.console();
        System.out.println("console=" + console);
        console.writer().println("hello from console");
    }
}

명령 프롬프트에서 응용 프로그램을 실행했을 때 다음과 같은 메시지가 나타납니다.

$ java TestConsole
console=java.io.Console@93dcd
hello from console

하지만 STDOUT를 파일로 수정했을 때...

$ java TestConsole >/tmp/test
Exception in thread "main" java.lang.NullPointerException
        at TestConsole.main(TestConsole.java:8)

은 8행입니다.console.writer().println()

/tmp/test의 내용은 다음과 같습니다.

console=null

제 설명이 도움이 됐으면 좋겠어요.

Console.writeline its its its. its its에 . . . .

콘솔 출력과 표준 출력은 다릅니다.언급한 Javadoc 페이지를 읽으면 명령줄에서 호출되고 출력이 이렇게 리디렉션되지 않은 경우에만 응용 프로그램이 콘솔에 액세스할 수 있음을 알 수 있습니다.

java -jar MyApp.jar > MyApp.log

밖에J의 되어 있습니다 는 이 .Console.writeline.

System.outstream PrintStream 、 、 조턴합합합 。

System.console.writerwriter PrintWriter 인인조조합합니 。

"System.out.println vs PrintWriter" 참조

언급URL : https://stackoverflow.com/questions/4005378/console-writeline-and-system-out-println

반응형