Java的InputStream的!=可读
-
19-09-2019 - |
题
我使用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是难吃。很高兴的聪明的人从太阳已经封装大部分离开你。
不隶属于 StackOverflow