java的IO流中可以通过自定义一个数组来存储数据,为什么还要使用缓存区呢?

 我来答
DoramiHe
2017-03-23 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59541
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
IO流自定义字节流的缓冲区:

思路:BufferedInputStream类中read()方法的工作原理
1)先一个一个从字节流中读取字节,读取一定量(自定义)之后,存储在一个字节数组(缓冲区)(FileInputStream.read(byte[] b)),并获得存储数量(read方法的返回值)。
2)一个一个字节返回,返回一个,存储数量减1,然后指针往后移一位,准备取下一个。
3)如果存储数量为0 ,代表当前数组中所有数据已经全部取完,此时再来一次读取(read(byte[] b)),再获得此次存储数量。
4)如果存储数量(即read方法返回-1),代表读到文件末尾,返回-1。
因此,需要用到以下几个变量:
读取的字节数量,指向数组中准备取哪一个的指针,将要返回的字节变量。
易水寒潭bd
2021-03-06 · TA获得超过2152个赞
知道答主
回答量:27
采纳率:0%
帮助的人:3.1万
展开全部

BufferedReader br = new BufferedReader(new FileReader(new File("123.txt")));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("456.txt")));
char[] ch = new char[1024];
int len;
while((len = br.read(ch)) != -1){
bw.write(ch,0,len);
}

题主的疑惑是在上面第1行和第3行中的代码里是吧?

问:为什么第1行代码的BufferedReader缓冲流中已经定义了一个大小为8192的char[]数组,而第3行代码中还要定义一个大小为1024大小的char[]数组作为缓冲区?

答:BufferedReader中8192大小的char[]数组和自定义的1024大小的char[]数组不是在同一个环节作用的。

举个生活中的例子说明:BufferedReader中8192大小的char[]数组相当于快递站,自定义的1024大小的char[]数组相当于快递小哥骑的三轮车。快递小哥每次取一个快递后并不是立即往快递站送,而是先放到三轮车中,等到三轮车装满了,再一次性往快递站送;等到快递小哥送了8次,把快递站也装满了,再一次性把快递站中的货物全部送走。不知上面的解释有没有说清楚。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式