1

nextInt()などにjava.util.Scannerを使用していますが、java.lang.Readable(唯一のコンストラクター引数)を使用している限り、すべて正常に機能していました。ただし、代わりにInputStreamを使用するように変更すると、Scanner.nextInt()が返されません。なぜなのかご存知ですか?

InputStreamの私の実装は次のようになります。

private static class ConsoleInputStream extends InputStream {
    ...
    private byte[] buffer;
    private int bufferIndex;
    public int read() throws IOException {
        ...
        while (...) {
            if (buffer != null && bufferIndex < buffer.length) {
                return buffer[bufferIndex++];    // THE COMMENT!
            }
            ...
        }
        ...
    }
}

コメントでデータを印刷すると、(正しく)「12 \ n」の「1」、「2」、「\ n」などが表示されます。この動作の原因となる、知らないうちにスキャナーへの接続がありますか。 ?

4

2 に答える 2

3

InputStreamのread()メソッドのjavadocsから:

「戻り値:データの次のバイト、またはストリームの終わりに達した場合は-1。」

-1を返すことはないと思いますか?

于 2010-01-08T23:09:52.623 に答える
1

問題は、自分で作成したInputStreamにあると思います。単にSystem.inを使用するのではなく、なぜ独自に構築したのですか?

アップデート:

JTextFieldからの入力が必要でした。

はい、わかった。通常、I / O処理を使用して、すでに利用可能なものを文字形式で読み取ることは意味がありませんが、Scannerを使用するとどのように作業が楽になるかはわかります。

それでも、「完成した」InputStreamを使用することで、コーディングと苦痛をある程度節約できたはずです。頭に浮かぶのは

InputStream is = new ByteArrayInputStream(myTextField.getText().getBytes());

Java I/Oは厄介です。太陽からの明るい人々があなたのためにそれのほとんどをカプセル化してくれてうれしいです。

于 2010-01-08T23:18:05.097 に答える