2016-07-22 8 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

はそれが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(); 
} 
関連する問題