黑马程序员技术交流社区
标题:
关于BufferOutputStream中缓存的,读取问题
[打印本页]
作者:
xiaoHei
时间:
2013-4-24 21:19
标题:
关于BufferOutputStream中缓存的,读取问题
本帖最后由 xiaoHei 于 2013-5-6 21:12 编辑
大家好我想请问一下:
BufferedInputStream类中的read()一次,
是不是java调用系统的方法去硬盘中读取8192次,每次读取一个字节?
然后,将这8192个字节放到bufferedInputStream类的缓冲区中?
作者:
wangyougu010
时间:
2013-4-24 21:31
是的,BufferedInputStream类,每次读一次文件,会读出8192个字节数据,存入缓冲区,然后从这个缓冲区将数据逐字节读出,直到将缓冲区中数据读完,然后再次去读文件,
作者:
breeze
时间:
2013-4-24 22:29
本帖最后由 breeze 于 2013-4-24 22:53 编辑
BufferedInputStream类中的read()方法是第一次调用接收8192个字节的数据存到方法内的缓冲数组, 每次循环调用read()方法是返回缓冲数组中的一个, 等到8192个全部读完以后, 再接收8192个字节的数据到缓冲数组, 应该是从硬盘中一次读取8192个字节的数据到内存中, 然后逐个返回, 相对FileInputStream的read()方法减少了硬盘读取次数
BufferedInputStream类中重写了read() 中调用了InputStream中的read(new byte[8192]);
作者:
付鑫鑫
时间:
2013-4-27 16:42
//是的,read()读取一个字节时, 其实已经读取8192个字节到缓冲区了
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo2 {
public static void main(String[] args) throws Exception {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt")); //创建缓冲输入流对象,并与文件输入流相关联
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt")); //创建缓冲输出流对象,并与文件输出流相关联
int b;
while((b = bis.read()) == -1) { // read()读取一个字节时, 其实已经读取8192个字节到缓冲区了
bos.write(b); // write()写出一个字节时, 没有直接写到文件, 写到缓冲区里了
bis.close(); //关闭流
bos.close();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2