缓冲输入流 BufferedInputStream,缓冲输出流 BufferedOutputStream。
缓冲流内部有一个缓冲区,缓冲区是一个字节数组,默认大小为8192。
缓冲流不直接调用系统方法进行读写操作,而是通过传入的输入输出流对象来实现。
缓冲流对象实例化必须传入输入输出流(InputStream / OutputStream)对象作为参数,或者其子类对象如(FileInputStream / FileOutputStream),可选参数size为指定缓冲区大小。
缓冲流复制视频文件示例
public class CopyVideoTest {
public static void main(String[] args) throws IOException {
//源文件必须存在,目的文件可以不存在,输出流会自动创建
File file1 = new File("C:\\Users\\Administrator\\Desktop\\FileTest\\测试视频1.mp4");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\FileTest\\测试视频2.mp4");
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//实例化流对象并进行绑定
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
byte[] bytes = new byte[1024];
//如果len==-1,表示已经读取完文件。如果len!=-1,表示这次实际读取的字节数目
int len = -1;
do {
len = bis.read(bytes); //尝试读取一个数组长度的数据
if (len!=-1){ //读取出数据后写入目标文件
bos.write(bytes,0,len);
}
}while (len!=-1); //文件没读取完就继续
}catch (IOException e){
e.printStackTrace();
}finally {
//关闭流,先关闭缓冲流,再关闭输入输出流
if (bis!=null){
bis.close();
}
if (bos!=null){
bos.close();
}
if (fis!=null){
fis.close();
}
if (fos!=null){
fos.close();
}
}
}
}