2016-07-22 3 views
0

read() 메서드는 InputStream 클래스에서 추상으로 선언됩니다. 그러나 System.in.read()을 사용하여 키보드에서 읽을 수 있습니다.기본적으로 System.in은 무엇을 참조합니까?

내 질문에 'in'은 InputStream 클래스의 참조입니다. 따라서 read() 메서드를 사용하려면 InputStream의 일부 하위 클래스를 참조해야합니다.

'in'은 어떤 클래스에 연결 되나요? 이 질문에 답하기위한 코드를 작성할 수 있습니까? 소스 코드에서 볼 수 있듯이

+0

그것은 말합니다 ** 표준 입력 :

public class SystemDotInClassFinder { public static void main(String[] args) { System.out.println(System.in.getClass().getName()); } } 

이 스크립트를 생성하는 실행 :

당신이 찾고있는 응용 프로그램입니다. [Javadoc] (https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#in)을 참조하십시오. *이 스트림은 이미 열려 있으며 입력 데이터를 제공 할 준비가되었습니다. 일반적으로이 스트림은 키보드 입력 또는 호스트 환경이나 사용자가 지정한 다른 입력 소스에 해당합니다. * –

답변

3

특정 질문에 대답 : 예, 당신이 코드를 작성하여 System.in의 클래스를 찾을 수 있습니다. **

java.io.BufferedInputStream 
1

IT는 BufferedInputStream을이다 :

private static void initializeSystemClass() { 
    props = new Properties(); 
    initProperties(props); 
    VM.saveAndRemoveProperties(props); 
    lineSeparator = props.getProperty("line.separator"); 
    Version.init(); 
    FileInputStream arg = new FileInputStream(FileDescriptor.in); 
    FileOutputStream arg0 = new FileOutputStream(FileDescriptor.out); 
    FileOutputStream arg1 = new FileOutputStream(FileDescriptor.err); 
    setIn0(new BufferedInputStream(arg)); 
    setOut0(newPrintStream(arg0, props.getProperty("sun.stdout.encoding"))); 
    setErr0(newPrintStream(arg1, props.getProperty("sun.stderr.encoding"))); 
    loadLibrary("zip"); 
    Terminator.setup(); 
    VM.initializeOSEnvironment(); 
    Thread arg2 = Thread.currentThread(); 
    arg2.getThreadGroup().add(arg2); 
    setJavaLangAccess(); 
    VM.booted(); 
} 
관련 문제