1

我正在使用 java.util.Scanner 来处理诸如 nextInt() 之类的事情,只要我使用 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!
            }
            ...
        }
        ...
    }
}

当我通过 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 很糟糕。很高兴来自 Sun 的聪明人已经为您封装了大部分内容。

于 2010-01-08T23:18:05.097 回答