在系统上使用扫描器进行缓冲.在Java中



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

定义一个BufferedReader并将其传递给您的方法。使用它将行读入字符串,并在其上附加Scanner而不是System.in

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

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

相关内容

  • 没有找到相关文章

最新更新