A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

as604049322 发表于 2015-6-7 16:28
我的回答是:当BufferedReader在读取文本文件时,会先从文件中读入数据,并置入其所提供的缓冲区,
然后后 ...

:o 厉害,赞!!!
回复 使用道具 举报
搞的好乱啊,都很有道理的样子,但我觉得不需要纠结这个啊,讲明白原理就行了,没啥服气不服气的
回复 使用道具 举报
其实要回答这个问题,直接拿MyBufferedReader的设计思路去问答就好了。要是问,为什么高效,就说利用缓存减少了IO切换
回复 使用道具 举报
你对比一下API中的BufferedReader和Reader就会发现,他们唯一的区别是BufferedReader提供了ReadLine()允许一行一行的读的增强方法,提高每次读取的效率,老师主要是想让你说出ReadLine()是BufferedReader存在的意义
回复 使用道具 举报
学习了,赞赞赞.
回复 使用道具 举报
这还真是 锱铢必较啊!
回复 使用道具 举报
wgy 中级黑马 2015-6-17 08:04:35
27#
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。
例如,
BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。
  其中构造方法主要有两个:
   BufferedReader(Reader in),这是指创建一个使用默认大小输入缓冲区的缓冲字符输入流。
   BufferedReader(Reader in, int sz),z这是指创建一个使用指定大小输入缓冲区的缓冲字符输入流。
   大概就是这样吧。

回复 使用道具 举报
君子无醉 发表于 2015-6-8 01:01
我觉得 老师让你再想想的原因,可能是你把char[]数组说成了byte[]数组。因为包装的是字符流。。 ...

说到点子上去了
回复 使用道具 举报
java核心技术卷二13页:“在javaSE5.0之前,处理文本输入的唯一方式就是通过BufferReader类,它拥有一个readLine方法可以使我们读入一行文本。你需要将带缓冲区的读入器与输入源组合起来

oracle api :Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.***Without buffering, each invocation of read() or readLine() could cause bytes to be read from the file, converted into characters, and then returned, which can be very inefficient.

所以BufferReader是不能直接从文件读数据的,只能从字符流里面读数的。
回复 使用道具 举报
问题都没看到!
回复 使用道具 举报
采纳的回答,果然很给力,学到了
回复 使用道具 举报
来学习~
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马