黑马程序员技术交流社区
标题:
关于io流的缓冲区的问题
[打印本页]
作者:
官仁杰
时间:
2012-10-9 01:11
标题:
关于io流的缓冲区的问题
本帖最后由 官仁杰 于 2012-10-9 17:50 编辑
FileReader fr = new FileReader("DateDemo.java");
char[] buf = new char[1024];
int num = 0;
while((num=fr.read(buf))!=-1)
{
System.out.print(new String(buf,0,num));
}
fr.close();
复制代码
这样写感觉是不是和用BufferedReader效果差不多?(用char数组做了缓冲区)
=================================================================
public static void copy_1()throws IOException
{
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("c:\\0.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\1.mp3"));
int by = 0;
while((by=bufis.read())!=-1)
{
bufos.write(by);
}
bufos.close();
bufis.close();
}
复制代码
这段代码中,用了缓冲区,但是从代码上看,是一次读写一个int,感觉还是对硬盘消耗很大。
总的问题就是,缓冲区的作用到底怎么体现的?
这些代码都是视频里的。
作者:
孙含庆
时间:
2012-10-9 01:59
FileReader fr = new FileReader("DateDemo.java");
char[] buf = new char[1024];
int num = 0;
while((num=fr.read(buf))!=-1)
//这里read 方法还是背地里一个一个的读,每读一次就执行一次IO操作,
//操作一次就访问一下硬盘,硬盘累呀
{
System.out.print(new String(buf,0,num));
}
fr.close();
public static void copy_1()throws IOException
{
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("c:\\0.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\1.mp3"));
int by = 0;
while((by=bufis.read())!=-1)
//而缓冲区的read 方法,因为在BufferReader 内部会创建缓冲区,
//他会一下将数据读入到自己的缓冲区,然后你调用read 方法时,就不用再去读硬盘,直接在内存中
//给你传递数据,极大的提高了数据处理速度。
建议在参考下API文档
{
bufos.write(by);
}
bufos.close();
bufis.close();
}
//一下子就是感觉用不用BufferedInputStream 还是要自己去创建字符数组,他就像是个多余似的。
//可是不创建自己的缓冲区数组,就拿不到数据。
//他还不如 BufferedReader 有一个读一行的readLine() 方法(可惜字节也没有一行不一行的概念)
//能想这么多还是好的,我当初看这里就没想这么多,汗呐。。。
作者:
王梁星
时间:
2012-10-9 11:45
数组不是缓冲区,带有Buffer的类才可以作缓冲区。缓冲区是特定基本类型元素的线性有限序列。除内容外,缓冲区的基本属性还包括容量、限制和位置。
不是一次读写一个到硬盘,而是读写一个到堆内存里。累积了一定数量的数据后才开始写入硬盘,所以无论数组还是缓冲区都减少了对硬盘的访问次数
应该缓冲区的机制优于数组吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2