Java InputStream!=可读

时间:2010-01-08 23:03:01

标签: java inputstream java.util.scanner

我正在使用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打印数据时(正确地)获取“1”,“2”,“\ n”等“12 \ n”等内容。是否有一些扫描仪连接,我不知道,导致这种行为?

2 个答案:

答案 0 :(得分:3)

来自InputStream的read()方法的javadoc:

“返回:数据的下一个字节,如果到达流的末尾,则返回-1。”

我猜你永远不会回来-1?

答案 1 :(得分:1)

我认为问题在于您自建的InputStream。你为什么建立自己的,而不是简单地使用System.in?

<强>更新

  

来自JTextField的通缉输入。

好的,明白了。使用I / O处理以字符形式读取已经可用的内容通常没有意义,但我可以看到这将如何使您的生活更轻松使用Scanner。

尽管如此,你可以通过使用“完成的”InputStream来节省一些编码和悲伤。我想到的是

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

Java I / O很难吃。很高兴Sun的聪明人将大部分内容都包含在内。