我使用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!
            }
            ...
        }
        ...
    }
}

当我由注释I(正确地)得到的东西如“1”,“2”,“\ n”为“12 \ n”个等有一些扫描器连接之后,不为人知我,打印数据引起这种行为?

有帮助吗?

解决方案

从的Javadoc的InputStream的read()方法:

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

我猜想,你永远返回-1?

其他提示

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

<强>更新

  

从一个JTextField求购输入。

好,知道了。它通常没有意义使用I / O处理读东西,这已经可以在角色形态,但我可以看到,将如何让你的生活更容易使用扫描仪。

不过,你大概只能用“已完成”的InputStream保存自己的一些编码和悲痛。想到什么是

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

的Java I / O是难吃。很高兴的聪明的人从太阳已经封装大部分离开你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top