



package com.itheima.d1_byte_buffer;import java.io.*;public class ByteBufferDemo { public static void main(String[] args) throws Exception { try ( // try括号里面都是资源对象(输入流和输出流) // 用完之后会自动调用close方法 // 这里面只能放置资源对象,用完全自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作) // 1. 创建一个字节输入流管道与原视频接通 InputStream is = new FileInputStream("C:\\Users\\aufs\\Desktop\\是心之所向 - 抖音.mp4"); //a. 把原始的字节输入流包装成高级的缓冲字节输入流(8kb,8kb)的读数据,数据加载很快 // 这里可以用多态写BufferedInputStream是 InputStream的子类 InputStream bis = new BufferedInputStream(is); // is作为文件对象传进入缓冲字节流 // 2.创建一个字节输出流管道与目标文件接通 输出: 将内存输出到硬盘(保存的感觉) OutputStream os = new FileOutputStream("C:\\Users\\aufs\\Pictures\\Saved Pictures\\newMp4.mp4"); // b. 把字节输出流管道包装成高级的缓冲字节输出流管道 OutputStream bos = new BufferedOutputStream(os); ) { // 3. 定义一个字节数组转移数据 byte[] buffer = new byte[1024]; // 1024B(字节) = 1kB int len; // 记录每次读取的数据 因为最后一桶水可能装不满 主要是记录最后一桶水读取了多少 while ((len = bis.read(buffer)) != -1) { // 当读取不到时 会返回 -1 如果不等于-1,则执行下面代码 System.out.println("读取了 " + len); // 用缓冲字节输出流管道对象写bos 优点会很快(缓冲池都在内存中) bos.write(buffer, 0, len); // 有多少写多少 } System.out.println("复制完成 "); } catch (Exception e) { e.printStackTrace(); } }}