image.png
    image.png

    image.png
    image.png

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