黑马程序员技术交流社区
标题:
建立自己的myBufferedInputStream疑问
[打印本页]
作者:
王利强
时间:
2012-3-20 22:54
标题:
建立自己的myBufferedInputStream疑问
代码是建立了我的缓冲区输入流,基本上是复写毕老师的代码,对于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();
}
}
作者:
♂诸侯♂
时间:
2012-3-21 02:06
所谓的缓冲区buffer,就是临时存贮区的意思,是暂时存放输入输出数据的一段内存,是为提高流的操作效率而出现的。
既然是临时存储,那么缓冲区的使用过程就应该是:放入数据,然后取出数据。
就是为了 一次取一个存一个麻烦。然后存多点 。一次性存完。效率提高。
比喻:比如你要蒸米饭。从米罐里把米弄到锅里。一粒粒太麻烦。用个buffer。就是盛米的,容器。这样就会提高效率。
比喻不知道恰当不。希望对你有帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2