18

System.in.read()Javaでの使用は何ですか?
これを説明してください。

4

10 に答える 10

41

2年半遅れた方が今までにないよりはましですよね?

int System.in.read()入力ストリームからデータの次のバイトを読み取ります。しかし、見上げるのは簡単なので、あなたはすでにそれを知っていると確信しています。だから、あなたがおそらく求めているのは:

  • intドキュメントに「」と記載されているのに、なぜを返すと宣言されているのbyteですか?

  • そして、なぜそれはゴミを返すように見えるのですか?(入力'9'しますが、戻ります57。)

intバイトのすべての可能な値に加えて、ストリームの終わりを示すために追加の値を返すことができる必要があるため、これはを返します。したがって、缶よりも多くの値を表現できる型を返す必要がありbyteます。

注:彼らはそれを作ることができたかもしれませんが、代わりに、おそらくCにとって歴史的に重要な帽子の先端としてshort選択しました。その関数は、を返しますが、より重要なのは、操作が少し面倒だからです(言語はリテラルを指定する手段がないため、リテラルを指定してキャストする必要があります。)さらに、特定のアーキテクチャでは、よりもパフォーマンスが優れています。intgetc()intshortshortintshortintshort

文字を整数として表示すると、その文字のASCII (*)値が表示されるため、ガベージが返されるように見えます。したがって、「9」は57として表示されます。ただし、キャラクターにキャストすると「9」になるので、すべて問題ありません。

このように考えてください。文字「9」を入力した場合、数字の9を返すことを期待するのは無意味です。それでは、 ?System.in.read()を入力した場合にどの数字が返されると期待するのでしょうか。'a'明らかに、文字は数字にマップする必要があります。ASCII (*)は、文字を数字にマッピングするシステムです。また、このシステムでは、文字「9」は番号9ではなく番号57にマップされます。

(*)必ずしもASCIIではありません。UTF-16のような他のエンコーディングである可能性があります。しかし、大多数のエンコーディング、そして確かにすべての一般的なエンコーディングでは、最初の127の値はASCIIと同じです。そして、これにはすべての英語の英数字と人気のある記号が含まれます。

于 2015-12-06T17:49:40.350 に答える
29

この例が役立つかもしれません。

import java.io.IOException;

public class MainClass {

    public static void main(String[] args) {
        int inChar;
        System.out.println("Enter a Character:");
        try {
            inChar = System.in.read();
            System.out.print("You entered ");
            System.out.println(inChar);
        }
        catch (IOException e){
            System.out.println("Error reading from user");
        }
    }
}
于 2013-03-16T07:26:40.873 に答える
5

Systemjava.langパッケージの最終クラスです

APIのソースコードからのコードサンプル

public final class System {

   /**
     * The "standard" input stream. This stream is already
     * open and ready to supply input data. Typically this stream
     * corresponds to keyboard input or another input source specified by
     * the host environment or user.
     */
    public final static InputStream in = nullInputStream();

}

read()抽象クラスの抽象メソッドですInputStream

 /**
     * Reads the next byte of data from the input stream. The value byte is
     * returned as an <code>int</code> in the range <code>0</code> to
     * <code>255</code>. If no byte is available because the end of the stream
     * has been reached, the value <code>-1</code> is returned. This method
     * blocks until input data is available, the end of the stream is detected,
     * or an exception is thrown.
     *
     * <p> A subclass must provide an implementation of this method.
     *
     * @return     the next byte of data, or <code>-1</code> if the end of the
     *             stream is reached.
     * @exception  IOException  if an I/O error occurs.
     */
    public abstract int read() throws IOException;

要するに、APIから:

入力ストリームからいくつかのバイトを読み取り、それらをバッファ配列に格納します。実際に読み取られたバイト数は整数として返されます。このメソッドは、入力データが使用可能になるか、ファイルの終わりが検出されるか、例外がスローされるまでブロックします。

InputStream.html#read()から

于 2013-03-16T07:37:27.507 に答える
4

受け入れられた答えを補足するために、次のSystem.out.read()ように使用することもできます。

class Example {
    public static void main(String args[])
        throws java.io.IOException { // This works! No need to use try{// ...}catch(IOException ex){// ...}         

        System.out.println("Type a letter: ");
        char letter = (char) System.in.read();
        System.out.println("You typed the letter " + letter);
    }
}
于 2018-02-04T20:56:11.407 に答える
4
import java.io.IOException;

class ExamTest{

    public static void main(String args[]) throws IOException{
        int sn=System.in.read();
        System.out.println(sn);
    }
}

char入力を取得したい場合は、次のようにキャストする必要があります。char sn=(char) System.in.read()

値byteは、0〜255の範囲のintとして返されます。ただし、他の言語のメソッドとは異なりSystem.in.read()、一度に1バイトのみを読み取ります。

于 2018-08-04T06:30:28.263 に答える
2

System.in.read()標準入力から読み取ります。

標準入力は、コンソール環境でユーザーから入力を取得するために使用できますが、そのようなユーザーインターフェイスには編集機能がないため、標準入力のインタラクティブな使用はプログラミングを教えるコースに制限されます。

標準入力のほとんどの実稼働での使用は、Unixコマンドラインパイプライン内で動作するように設計されたプログラムで行われます。このようなプログラムでは、プログラムが処理しているペイロードは標準入力から取得され、プログラムの結果は標準出力に書き込まれます。その場合、標準入力はユーザーによって直接書き込まれることはなく、別のプログラムのリダイレクトされた出力またはファイルの内容です。

典型的なパイプラインは次のようになります。

# list files and directories ordered by increasing size
du -s * | sort -n

sort実際にはコマンドの出力である標準入力からデータを読み取りますdu。ソートされたデータは、の標準出力に書き込まれますsort。これはデフォルトでコンソールに表示され、ファイルまたは別のコマンドに簡単にリダイレクトできます。

そのため、標準入力がJavaで使用されることは比較的まれです。

于 2013-03-16T07:26:07.730 に答える
1

この例は役に立ちますか?コメントと一緒に、もちろん> :)

警告:この段落/投稿では、男性は使い古された頻繁な単語です

全体的にScanner、大きな文章を入力できるので、このクラスを使用することをお勧めしますSystem.in.read。そのような側面があるかどうかは完全にはわかりません。可能であれば、私を訂正してください。

public class InputApp {

// Don't worry, passing in args in the main method as one of the arguments isn't required MAN

    public static void main(String[] argumentalManWithAManDisorder){
        char inputManAger;

        System.out.println("Input Some Crap Man: ");
        try{
            // If you forget to cast char you will FAIL YOUR TASK MAN
            inputManAger = (char) System.in.read();
            System.out.print("You entererd " + inputManAger + " MAN");
        }
        catch(Exception e){
            System.out.println("ELEMENTARY SCHOOL MAN");
        }
    }
}
于 2015-10-16T13:05:13.837 に答える
0

これにより、標準入力(主にコンソール)から読み取ることができます。このSOの質問はあなたを助けるかもしれません。

于 2013-03-16T07:27:41.867 に答える
0

System.in.read()は、System.inクラスの読み取り入力メソッドであり、「標準入力ファイル」または従来のOSでは0です。

于 2014-11-18T10:48:39.433 に答える
0

system.in.read()メソッドはバイトを読み取り、整数として返しますが、1〜9の範囲でnoを入力すると、ASCIIコードテーブルでは1〜9のASCII値が48〜57であるため、48以上の値が返されます。希望、それは役立ちます。

于 2019-06-30T08:43:10.967 に答える