黑马程序员技术交流社区

标题: 关于IO的问题 [打印本页]

作者: zuiaichiyu    时间: 2013-11-8 23:02
标题: 关于IO的问题
使用字节缓冲对象和不使用字节缓冲对象有什么区别,二者都必须定义一个字节数组缓冲读取的文件,定义缓冲区对象有什么意义呢,什么时候使用字节缓冲对象呢
  1. // 使用字节缓冲对象包装读取字节文件
  2.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  3.                                 "d:\\t.mp3"));
  4.                 BufferedOutputStream bos = new BufferedOutputStream(
  5.                                 new FileOutputStream("e:\\tt.mp3"));

  6.                 byte[] buf = new byte[1024];
  7.                 int len = 0;
  8.                 while ((len = bis.read(buf)) != -1) {
  9.                         bos.write(buf, 0, len);
  10.                 }
  11.                 bis.close();
  12.                 bos.close();

  13.                 // 不使用字节缓冲区对象复制字节文件
  14.                 FileInputStream fis = new FileInputStream("d:\\t.mp3");
  15.                 FileOutputStream fos = new FileOutputStream("e:\\ttt.mp3");

  16.                 byte[] b = new byte[1024];
  17.                 int len1 = 0;
  18.                 while ((len1 = fis.read(b)) != -1) {
  19.                         fos.write(b, 0, len1);
  20.                 }
  21.                 fis.close();
  22.                 fos.close();
复制代码

作者: 何丛    时间: 2013-11-9 09:02
用字节缓冲流是为了提高读写效率,你的程序是一次性将1024个字节的数据读入到数组中,这样两者没有什么区别, 如果是一个一个字节读取的话,效率就不一样了。因为字节缓冲流是将数据先读入到读入到数组中,然后根据需要每次返回数据,而一般的字节流则是一次从硬盘上读取一个数据到内存中,这样效率是比较低下的。建议楼主看一下字节缓冲流的原理
作者: 枫儿    时间: 2013-11-9 18:19
那你看电影网速不行 停下 看下 那种卡卡的方式爽呢  还是缓冲一段后流畅看着爽呢   不要想其他啥 就问你觉得那种方式爽
作者: hel    时间: 2013-11-10 20:48
流可分为两大类,字节流和字符流,且他们都有输入流(从屏幕、硬盘或是其他数据源读取数据放入内存中)和输出流(用来向屏幕、硬盘等目的地输出内容),字节流就是一个字节一个字节的读取或是输出(字节都是8位,0到255之间的整数),而字符流是按照文本的那种字符来读取和输出,就是直接读取数字、字母或是中文字等这些我们能够直接识别的字符;至于缓冲流,是指当输出的时候带 有缓冲功能的流(BufferOutputStream),没有缓冲功能的流当其输出时是直接存入目的地,如果有缓冲功能,则会将输出的内容先放置在内存中,等到有一定数据量的时候,或是流关闭、或调用flush()方法时,才会将相应的内容保存到硬盘或是其它目的地中




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2