1. java.io.BufferedInputStream与java.io.BufferedOutputStream可以为InputStream,OutputStream类增加缓冲区功能。构建BufferedInputStream实例时,需要给定一个InputStream类型的实例,实现BufferedInputStream时,实际上最后是实现InputStream实例。同样,构建BufferedOutputStream时,也需要给定一个OutputStream实例,实现BufferedOutputStream时,实际上最后是实现OutputStream实例。
2. BufferedInputStream的数据成员buf是一个位数组,默认为2048字节。当读取数据来源时,例如文件,BufferedInputStream会尽量将buf填满。当使用read()方法时,实际上是先读取buf中的数据,而不是直接对数据来源作读取。当buf中的数据不足时,BufferedInputStream才会再实现给定的InputStream对象的read()方法,从指定的装置中提取数据。
3. BufferedOutputStream的数据成员buf也是一个位数组,默认为512字节。当使用write()方法写入数据时实际上会先将数据写到buf中,当buf已满时才会实现给定的OutputStream对象的write()方法,将buf数据写到目的地,而不是每次都对目的地作写入的动作。
实现文件复制功能:
FileOutputStream fos=new FileOutputStream(file1);
FileInputStream fin=new FileInputStream(file2);
int len;
byte[]buffer=new byte[1024]; //这里需要建立缓冲区
while((len=fin.read(buffer))!=-1){ //从文件读取数据写到自定义缓冲区中
fos.write(buffer,0,len); //读取自定义缓冲区里长度为len的字节数据输出到文件中
}
bos.flush();
如果使用缓存流,就不需要自己建立缓冲区
FileOutputStream fos=new FileOutputStream(file1);
FileInputStream fin=new FileInputStream(file2);
BufferedInputStream bis=new BufferedInputStream(fin); //进行缓冲包装
BufferedOutputStream bos=new BufferedOutputStream(fos);
int len;
while((len=bis.read())!=-1){ //读取文件的数据写到BufferedInputStream 的缓冲区里去
bos.write(len); // 从缓冲区读取len长度的字节输出到文件中
}
bos.flush();
PS:上面的理解和测试好像有的问题。看到的朋友自己重新了解一下。我好像理解错误了。有待修改
BufferedReader 的使用
FileReader fr=new FileReader("d:/aaa.txt");
FileWriter fin=new FileWriter("d:/1231.txt");
BufferedReader br=new BufferedReader(fr);
String buffer=null;
while((buffer=br.readLine())!=null){
fin.write(buffer);
}
fin.flush();