繁体   English   中英

Java InputStream!=可读

[英]Java InputStream != Readable

我正在使用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”等等。是否有一些扫描程序连接,我不知道,导致此行为?

从InputStream的read()方法的javadocs:

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

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

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

更新:

想从JTextField输入。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM