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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张健 中级黑马   /  2012-3-15 12:11  /  1938 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

BufferedInputStream和BufferedOutputStream实例对象中创建的缓冲区与底层系统提供的缓冲区有什么区别?
请各位踊跃发表意见,谢谢!

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

5 个回复

倒序浏览
我也不明白,求高手解释一下
比如Reader和Writer都有自己的缓冲区 为什么还要用BufferedReader和BufferedWriter修饰呢
回复 使用道具 举报
BufferedInputStream与BufferedOutputStream是java提供的两个缓冲区包装类,不管底层系统是否使用了缓冲区,这两个类在自己的实例对象中创建缓冲区。这种缓冲区与底层系统提供的缓冲区的区别:底层系统提供的系统缓冲区直接与目标设备交换数据,而包装类提供的缓冲区需要调用包装类所包装的输出流对象将缓冲区的数据写入到目标或底层缓冲区中,或者调用包装类所包装的输入流对象从目标设备或底层缓冲区中读取数据到包装类的缓冲区中。底层缓冲区可以一次从硬盘读取大量数据或者一次向硬盘写入大量数据,而BufferedInputStream一次只能从底层缓冲区中读取一个数据,将读取到数据缓存到BufferedOutputStream缓冲区中,然后一次读取多个数据。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1 亲,输出的时候可以自定义缓冲区数组,来实现.

查看全部评分

回复 使用道具 举报
张希强 发表于 2012-3-15 12:22
BufferedInputStream与BufferedOutputStream是java提供的两个缓冲区包装类,不管底层系统是否使用了缓冲区 ...

“BufferedInputStream一次只能从底层缓冲区中读取一个数据,将读取到数据缓存到BufferedOutputStream缓冲区中,然后一次读取多个数据。”,前面说“一次只能从底层缓冲区中读取一个数据”,后面“一次读取多个数据”,意思是刚开始第一次读取一个数据,然后第二次读取多个数据?
回复 使用道具 举报
BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。
回复 使用道具 举报
BufferedInputStream和BufferedOutputStream实例对象中创建的缓冲区,他们是一种用软件设计的方法来模拟硬件的底层系统提供的缓冲区。这是一种用软件设计来实现硬件动作的方式。就像我们在电脑上装上各种播放器来模拟一个vcd影碟机。
BufferedInputStream和BufferedOutputStream在内存中开辟好一段空间,这段空间专门的用来存储一段数据,然后一次性的写入到目标设备,会显得很高效。跟系统底层的硬件缓冲实现有异曲同工的意思。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马