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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王利强 中级黑马   /  2012-3-20 22:54  /  1448 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码是建立了我的缓冲区输入流,基本上是复写毕老师的代码,对于myBufferedInputStream类中的copy()方法过程不是太了解,到底BufferedInputStream在内存中是怎么样运行的呢?数组中的数据不就是在缓冲区么?为什么还要取出来放在缓冲区?感觉这样不是绕远路了?具体过程哪位能不能给我解释下,最好能画个图,毕老师说的不太懂啊

import java.io.*;
import java.util.*;
class  myBufferedInput
{
public static void main(String[] args) throws IOException
{
  copy();
}
public static void copy()throws IOException
{ myBufferedInputStream bfi=new myBufferedInputStream(new FileInputStream("c:\\1.mp3"));
  BufferedOutputStream bfo=new BufferedOutputStream(new FileOutputStream("c:\\王利强.mp3"));
  int by=0;
  while((by=bfi.myRead())!=-1)
  {
   bfo.write(by);
  }
  bfi.myClose();
  bfo.close();

}
}
class myBufferedInputStream
{ private InputStream In;
byte[] buf=new byte[1024];
int pos,count;
myBufferedInputStream(InputStream In)
{
  this.In=In;
}
public int myRead()throws IOException
{
  if(count==0)
  {
   count=In.read(buf);
   if (count<0)
    return -1;
   pos=0;
   byte b=buf[pos];
   count--;
   pos++;
   return b&255;

  }
  else if(count>0)
  {
   byte b=buf[pos];
   count--;
   pos++;
   return b&255;
  }
  return -1;
  
}
public void myClose()throws IOException
  {
   In.close();
  }

}

1 个回复

倒序浏览
所谓的缓冲区buffer,就是临时存贮区的意思,是暂时存放输入输出数据的一段内存,是为提高流的操作效率而出现的。
既然是临时存储,那么缓冲区的使用过程就应该是:放入数据,然后取出数据。
就是为了 一次取一个存一个麻烦。然后存多点  。一次性存完。效率提高。


比喻:比如你要蒸米饭。从米罐里把米弄到锅里。一粒粒太麻烦。用个buffer。就是盛米的,容器。这样就会提高效率。

比喻不知道恰当不。希望对你有帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马