2016-05-28 66 views
1

我跑到下面的例子:为什么不的BufferedReader缓冲输入?

public static void main(String[] args) throws IOException{ 
     Reader reader = new BufferedReader(new InputStreamReader(System.in)); 
     int character; 
     do{ 
      character = reader.read(); 
      System.out.println(character); 
     } while(character != '\n'); 
    } 

,并通过实际的行为混淆。我以为BufferedReader中的默认缓冲区大小足以容纳超过1个字符以上。

但是,当我进入

a__NEW_LINE__ 

它会导致新的生产线一起被打印的字符。为什么?我预计缓冲区未满,因此应该没有输出。

+0

重复的问题。检查[这个答案](http://stackoverflow.com/questions/4007534/why-cant-we-read-one-character-at-a-time-from-system-in)。 –

回答

3

BufferedReader缓冲器时可能的数据。在这种情况下,没有要缓冲的数据。所以,它会立即返回您输入的内容。 BufferedReader当具有大的流,如文件(FileInputStream)用于和在所有情况下的读取方法返回一个字符而在幕后,BufferedReader读更多的数据,从相关InputStream(取决于缓冲器大小)并将其缓存以提高性能是非常有用的。