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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

FileReader fr = new FileReader("1.txt");
char[] ch = new char[6];
int num = fr.read(ch);
System.out.println("num="+num+"..."+String.valueOf(ch));
1.txt里面有10个字符
我想问的是fr.read方法获取字符并存入ch中,是一次性获取6个字符存到ch中,还是每次获取一个字符存到ch中,直到chd存满为止?

谢谢!

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-8-30 09:16:03
沙发
从javaAPI文档中可以查到, fr.read()方法每次读取单字符,并将其存入到你所定义的数组中,当数组存满后即输入一次,然后再把读取的字符存入到数组的第一个位置,依次类推。
回复 使用道具 举报
黑马网友  发表于 2011-8-30 09:39:37
藤椅
public int read(char[] cbuf)
         throws IOException将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。

参数:
cbuf - 目标缓冲区
返回:
读取的字符数,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误


API中没有你说的这样描述啊?
回复 使用道具 举报
其实这个问题,主要就是个流的概念的问题
流就是一种数据在传输时的形态,简单理解的话,你可以把流想象成一串有序的010010101010之类的序列
所以,不管你调用什么方法去读取数据,数据永远是以这样一串有序的数字的形态依次读取进来的
其实,所有各种各样的读取方法之间的区别,只是每次读取数据时所使用的单位不同而已,本质上都是一样的
所以,当你调用fr.read()方法读取数据的时候,数据也是通过这样一个序列依次地读取进来的
用你的话说,应该就是“每次获取一个字符存到ch中,直到chd存满为止”了

其实更确切的说,应该是下面这种说法:
将字符按顺序依次地读到ch中,直到chd存满、或者文件中没有可读的字符,或者读取的过程中出现异常为止

所以,缓冲区的作用是:
fr只管一门心思从文件中往缓冲区里读数据,只要缓冲区读满了,就返回一次
而不是,fr根据缓冲区的大小,去读取文件中相应长度的数据并返回
这样解释的话,应该就更明白些了吧~
[ 本帖最后由 李叶 于 2011-08-30  11:25 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-8-30 12:29:12
报纸
其实可以这样理解,FileReader是操作字符流而不是“字符串流”,因此每次read()每次只能读取一个字符,处理一个字符,字符数组只是提供了一个容器的作用,来装每一次read读取的字符,就像每次只流出一滴水,要喝的痛快,就装满才喝,如果你一次就可以处理那么多字符,那么就不是定义字符数组来装,而是定义字符串数组来装,那不是更给力。

评分

参与人数 1技术分 +4 收起 理由
admin + 4 不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-30 13:32:09
地板

回复 板凳 的帖子

谢谢  我差不多明白了。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不懂就问,好童鞋!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-8-30 13:33:32
7#

回复 报纸 的帖子

谢谢。。。。。。
回复 使用道具 举报
黑马网友  发表于 2011-8-30 13:35:29
8#
:lol 。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马