1

以下の演習問題のコードを考えると、大まかに言う仕様は次のとおりです。

コードが機能する理由がよくわかりません。「Enter Data:」が表示された後にプログラムが一時停止し、改行を待つのはなぜですか? この動作はどこで定義され、どのように変更できますか?

import java.io.*;
import java.util.LinkedList;

public class StreamTokeTwo {

private int ttype = 0;
StreamTokenizer tokenizer = new StreamTokenizer(new BufferedReader(
        new InputStreamReader(System.in)));

private void setupTokenizer() {
    tokenizer.resetSyntax();
    tokenizer.wordChars(33, 126);
    tokenizer.whitespaceChars(0, 32);
    tokenizer.whitespaceChars(44,44);
    tokenizer.whitespaceChars(47,47);
    tokenizer.eolIsSignificant(true);
}

private String[] readTokens() {
    LinkedList<String> list = new LinkedList<String>();
    String[] array = null;

    do {
        try {
            ttype = tokenizer.nextToken();
        } catch (Exception e) {
            System.exit(1);
        }
        if (ttype == StreamTokenizer.TT_WORD) {
            list.add(tokenizer.sval);
        }
    } while (ttype != StreamTokenizer.TT_EOL);

    array = list.toArray(new String[0]);
    return array;
}

public static void main(String[] args) {
    StreamTokeTwo streamToke = new StreamTokeTwo();
    streamToke.setupTokenizer();

    for (int i = 0; i < 5; ++i) {
        System.out.print("Enter data: ");
        String[] array = streamToke.readTokens();
        for (String str : array) {
            System.out.print(str + " ");
        }
        System.out.println();
    }
}
}
4

2 に答える 2

3

入力待機動作は、オペレーティング システムとシェルの機能です。これらは、ユーザーの入力を JVM の標準入力に変換し、ファイルの終わりを構成するものと、標準入力を読み取っているプログラムにデータを渡せるようにするものを決定します。

JVMに関する限り、利用可能なデータがなく、ファイルの終わりにない場合にブロックする方法で、標準入力からデータを要求しているだけです。標準入力がディスクファイルの場合も同じです。

于 2012-12-23T17:13:41.563 に答える
1

InputStreamReaderこれは、にブロッキング動作があるというステートメントによって暗示されています。読み取りメソッドは、読み取るものがあるか、エラーが発生するまで戻りません。

于 2012-12-23T17:07:09.013 に答える