我认为是
因为每次系统调用都需要耗费大量资源
bufferedreader我想起的是一个缓冲的作用
比如说我要读1M的东西
一次读1k,读1024次,缓冲读取
要比一次读1个字节,读1024*1024次要快
因为减少了大量的系统的调用开销我也是菜鸟,不一定对,但我想应该是这个意思
:)

解决方案 »

  1.   

    原理:BufferedReader会一次性从物理流中读取8k(默认数值,可以设置)字节内容到内存,
    如果外界有请求,就会到这里存取,如果内存里没有才到物理流里再去读。即使读,也是再8k。
    而直接读物理流,是按字节来读。
    对物理流的每次读取,都有IO操作。IO操作是最耗费时间的。BufferedReader就是减少了大量IO操作,而为你节省了时间。
      

  2.   

    简单的说,一次IO操作,读取一个字节也是读取,读取8k个字节也是读取,两者花费时间相差不多。
    而一次IO的来回操作却要耗费大量时间。
    好比是一辆大型汽车(设装100人),要去车站接人到公司,接一个人也是接,接100个人也是接,而时间一样。显然,接100个人最划算。物理流就是一次一个字节(一个人)
    Buffered就是一次8k个字节(100个人)
    对于读取定长字节文件,当然BufferedReader更快了!
      

  3.   

    问题是 BufferedReader 最终也是间接调用 InputStream 的read方法。如果需要反复使用资源,缓冲当然会很快。但是如果只需要对物理流进行一次读取,会有什么效率差别呢?一次读1K 我用InputStreamReader一样做得到。另外,还有一点想问的。 比如调用read();方法一次读 20 个字节 ,如果这时候输入流中之到达了10字节,那么read()方法会返回呢,还是会堵塞直到读取完20字节?
      

  4.   

    请问,怎么样设置BufferedReader一次性读取更高的字节数?
      

  5.   

    feiyuegaoshan(飞跃) 同志说的相当清楚了:)
      

  6.   

    刚刚试过了, read()方法只读入已到达的字节。不堵塞等待。不过如果一个字节都读不到的话会堵塞的。要么堵塞,要么读一个以上字节。这样的话 BufferedReader里的 fill方法就写的不是很好了。谢过各位,散分。
      

  7.   

    我的意思是我想让BufferedReader一次性由默认读取8K字节提升到一次性读取16K字节,怎么完成,对不起,我刚学java    *^_^*
      

  8.   

    BufferedReader 并没有重载 read(char[] ) 方法,如果代码只使用了此read方法,是否实际无缓冲功能?
      

  9.   

    BufferedReader可以一次读一行,我觉得这是它最有用的地方。