/*
    处理流之一:缓冲流的使用

    1.缓冲流:
    BufferedInputStream
    BufferedOutputStream

    • BufferedReader
      BufferedWriter


      2.作用:提高流的读取、写入的速度
      提高读写速度的原因:内部提供了一个缓冲区

      * 3.处理流,就是套接”__在已有的流的基础上
      *

    字节缓冲流

    1. package com.atguigu.java1;
    2. import org.junit.Test;
    3. import java.io.*;
    4. /**
    5. * 处理流之一:缓冲流的使用
    6. *
    7. * 1.缓冲流:
    8. * BufferedInputStream
    9. * BufferedOutputStream
    10. * BufferedReader
    11. * BufferedWriter
    12. *
    13. * 2.作用:提高流的读取、写入的速度
    14. * 提高读写速度的原因:内部提供了一个缓冲区
    15. *
    16. * 3.处理流,就是“套接”在已有的流的基础上
    17. *
    18. *
    19. * @author Dxkstart
    20. * @create 2021-05-30 14:29
    21. */
    22. public class BufferedTest {
    23. /*
    24. 实现非文本文件的复制
    25. */
    26. @Test
    27. public void BufferedSreamTest(){
    28. BufferedInputStream bis = null;
    29. BufferedOutputStream bos = null;
    30. try {
    31. //1.造文件
    32. File file1 = new File("爱丽丝1.jpg");
    33. File file2 = new File("爱丽丝2.jpg");
    34. //2.造流
    35. //2.1 造节点流
    36. FileInputStream fis = new FileInputStream(file1);
    37. FileOutputStream fos = new FileOutputStream(file2);
    38. //2.2 造缓冲流
    39. bis = new BufferedInputStream(fis);
    40. bos = new BufferedOutputStream(fos);
    41. //3.复制的细节:读取、写入
    42. byte[] buffer = new byte[10];
    43. int len;
    44. while((len = bis.read(buffer)) != -1){
    45. bos.write(buffer,0,len);
    46. }
    47. } catch (IOException e) {
    48. e.printStackTrace();
    49. } finally {
    50. //4.关闭流资源
    51. //要求:先关闭外层的流,再关闭内层的流
    52. //说明:关闭外层的流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略
    53. try {
    54. if(bis != null)
    55. bis.close();
    56. } catch (IOException e) {
    57. e.printStackTrace();
    58. }
    59. try {
    60. if(bos != null)
    61. bos.close();
    62. } catch (IOException e) {
    63. e.printStackTrace();
    64. }
    65. }
    66. }
    67. //实现文件复制的方法
    68. public void copyFileWithBuffered(String srcPath,String destPath){
    69. BufferedInputStream bis = null;
    70. BufferedOutputStream bos = null;
    71. try {
    72. //1.造文件
    73. File file1 = new File(srcPath);
    74. File file2 = new File(destPath);
    75. //2.造流
    76. //2.1 造节点流
    77. FileInputStream fis = new FileInputStream(file1);
    78. FileOutputStream fos = new FileOutputStream(file2);
    79. //2.2 造缓冲流
    80. bis = new BufferedInputStream(fis);
    81. bos = new BufferedOutputStream(fos);
    82. //3.复制的细节:读取、写入
    83. byte[] buffer = new byte[1024];
    84. int len;
    85. while((len = bis.read(buffer)) != -1){
    86. bos.write(buffer,0,len);
    87. }
    88. } catch (IOException e) {
    89. e.printStackTrace();
    90. } finally {
    91. //4.关闭流资源
    92. //要求:先关闭外层的流,再关闭内层的流
    93. //说明:关闭外层的流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略
    94. try {
    95. if(bis != null)
    96. bis.close();
    97. } catch (IOException e) {
    98. e.printStackTrace();
    99. }
    100. try {
    101. if(bos != null)
    102. bos.close();
    103. } catch (IOException e) {
    104. e.printStackTrace();
    105. }
    106. }
    107. }
    108. @Test
    109. public void testcopyFileWithBuffered(){
    110. long start = System.currentTimeMillis();
    111. String srcPath = "C:\\Users\\Administrator\\Desktop\\IO\\视频\\\\01.mp4";
    112. String destPath = "C:\\Users\\Administrator\\Desktop\\IO\\视频\\\\03.mp4";
    113. copyFileWithBuffered(srcPath,destPath);
    114. long end = System.currentTimeMillis();
    115. System.out.println("复制操作花费的时间为:" + (end - start));//3460ms,917ms
    116. }
    117. }

    字符缓冲流

    1. package com.atguigu.java1;
    2. import org.junit.Test;
    3. import java.io.*;
    4. /**
    5. * @author Dxkstart
    6. * @create 2021-05-30 15:17
    7. */
    8. public class BufferedTest2 {
    9. /*
    10. 使用BufferedReader和BufferedWriter实现文本文件的复制
    11. */
    12. @Test
    13. public void testBufferesReaderBufferedWriter(){
    14. BufferedReader br = null;
    15. BufferedWriter bw = null;
    16. try {
    17. //1\2.1\2.2步
    18. br = new BufferedReader(new FileReader(new File("C:\\Users\\Administrator\\Desktop\\IO\\hi.txt")));
    19. bw = new BufferedWriter(new FileWriter(new File("C:\\Users\\Administrator\\Desktop\\IO\\hi2.txt")));
    20. //读写操作
    21. //方式一:
    22. // char[] buffer = new char[1024];
    23. // int len;
    24. // while((len = br.read(buffer)) != -1){
    25. // bw.write(buffer,0,len);
    26. // // bw.flush();
    27. // }
    28. //方式二:
    29. String data;
    30. while((data = br.readLine()) != null){
    31. //方法一:
    32. bw.write(data + "\n");//data中不包含换行符
    33. // //方法二:
    34. // bw.write(data);//data中不包含换行符
    35. // bw.newLine();//提供换行操作
    36. }
    37. } catch (IOException e) {
    38. e.printStackTrace();
    39. } finally {
    40. //关闭资源
    41. try {
    42. if(br != null) {
    43. br.close();
    44. }
    45. } catch (IOException e) {
    46. e.printStackTrace();
    47. }
    48. try {
    49. if(bw != null) {
    50. bw.close();
    51. }
    52. } catch (IOException e) {
    53. e.printStackTrace();
    54. }
    55. }
    56. }
    57. }