0

我在 Java 中遇到了 Scanner 的问题。我有一个System.in基于这些数据解析和创建对象的方法。但是如果我Scanner在方法内部创建,我有两种方法可以做到这一点,即关闭和不关闭。在第一种情况下,也Scanner.close()关闭System.in,否则它会提前缓冲,并且它缓冲的字符变得无法从另一个 Scanner 访问。所以现在我将一个Scanner实例传递给方法。但是,如果您需要从控制台读取另一个对象,例如通过BufferedReader. 此外,它似乎不是一个真正干净的设计解决方案。

4

2 回答 2

0

我猜设计已经考虑到一次只有一个ReaderorScanner可以实际读取InputStream( System.in),因此在其上放置几个Readers 是无用的(因为它也消耗流),因此可以关闭底层的InputStream.

编辑:一种解决方案是InputStream直接使用 ( read()) 并自己处理字节的读取。例如,您可以使用String构造函数来仅返回未使用的部分。String(byte[])substring()

于 2013-03-25T00:07:05.280 回答
0

定义 aBufferedReader并将其传递给您的方法。使用它将行读入字符串并附加 aScanner而不是System.in.

于 2013-03-25T00:27:51.947 回答