



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();
}
}
}