缓冲输入流 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(); } } } }