我正在使用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”等内容。是否有一些扫描仪连接,我不知道,导致这种行为?
答案 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的聪明人将大部分内容都包含在内。