00094_缓冲区

1、字节缓冲区

  (1)写入数据到流中,字节缓冲输出流 BufferedOutputStream;

  (2)读取流中的数据,字节缓冲输入流 BufferedInputStream;

  (3)它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度。

2、字节缓冲输出流BufferedOutputStream

  通过字节缓冲流,进行文件的读写操作,写数据到文件的操作 。

 1 import java.io.BufferedOutputStream;
 2 import java.io.FileOutputStream;
 3 import java.io.IOException;
 4 
 5 public class BufferedOutputStreamDemo01 {
 6     public static void main(String[] args) throws IOException {
 7 
 8         // 写数据到文件的方法
 9         write();
10     }
11 
12     /*
13      * 写数据到文件的方法 1,创建流 2,写数据 3,关闭流
14      */
15     private static void write() throws IOException {
16         // 创建基本的字节输出流
17         FileOutputStream fileOut = new FileOutputStream("d:\abc.txt");
18         // 使用高效的流,把基本的流进行封装,实现速度的提升
19         BufferedOutputStream out = new BufferedOutputStream(fileOut);
20         // 2,写数据
21         out.write("I Love You".getBytes());
22         // 3,关闭流
23         out.close();
24     }
25 }

3、字节缓冲输入流 BufferedInputStream

  完成读取文件中数据的操作。

 1 /*
 2      * 从文件中读取数据
 3      * 1,创建缓冲流对象
 4      * 2,读数据,打印
 5      * 3,关闭
 6      */
 7     private static void read() throws IOException {
 8         //1,创建缓冲流对象
 9         FileInputStream fileIn = new FileInputStream("d:\abc.txt");
10         //把基本的流包装成高效的流
11         BufferedInputStream in = new BufferedInputStream(fileIn);
12         //2,读数据
13         int ch = -1;
14         while ( (ch = in.read()) != -1 ) {
15             //打印
16             System.out.print((char)ch);
17         }
18         //3,关闭
19         in.close();
20     }

4、使用基本的流与高效的流完成复制文件

  测试视频链接:测试视频 密码:obki

  1 import java.io.BufferedInputStream;
  2 import java.io.BufferedOutputStream;
  3 import java.io.FileInputStream;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 
  7 /*
  8  * 需求:将d:\test.mp4文件进行复制
  9  *         采用4种方式复制
 10  *         方式1: 采用基本的流,一次一个字节的方式复制    共耗时 67564毫秒
 11  *         方式2: 采用基本的流,一个多个字节的方式赋值    共耗时 109毫秒
 12  *         方式3: 采用高效的流,一次一个字节的方式复制    共耗时 936毫秒
 13  *         方式4: 采用高效的流,一个多个字节的方式赋值    共耗时 43毫秒
 14  * 
 15  * 数据源: d:\test.mp4
 16  * 目的地1: d:\copy1.mp4
 17  * 目的地2: d:\copy2.mp4
 18  * 目的地3: d:\copy3.mp4
 19  * 目的地4: d:\copy4.mp4
 20  * 
 21  * 实现的步骤:
 22  *     1,指定数据源
 23  *     2,指定目的地
 24  *     3,读数据
 25  *     4,写数据
 26  *     5,关闭流
 27  * 
 28  */
 29 public class CopyAVI {
 30     public static void main(String[] args) throws IOException {
 31         // 开始计时
 32         long start = System.currentTimeMillis();
 33         // 方式1: 采用基本的流,一次一个字节的方式复制
 34         // method1("d:\test.mp4", "d:\copy1.mp4");
 35         // 方式2: 采用基本的流,一个多个字节的方式赋值
 36         // method2("d:\test.mp4", "d:\copy2.mp4");
 37         // 方式3: 采用高效的流,一次一个字节的方式复制
 38         // method3("d:\test.mp4", "d:\copy3.mp4");
 39         // 方式4: 采用高效的流,一个多个字节的方式赋值
 40         method4("d:\test.mp4", "d:\copy4.mp4");
 41 
 42         // 结束计时
 43         long end = System.currentTimeMillis();
 44         // 打印耗时多少毫秒
 45         System.out.println("共耗时 " + (end - start) + "毫秒");
 46     }
 47 
 48     // 方式4: 采用高效的流,一个多个字节的方式赋值
 49     private static void method4(String src, String dest) throws IOException {
 50         // 1,指定数据源
 51         BufferedInputStream in = new BufferedInputStream(new FileInputStream(
 52                 src));
 53         // 2,指定目的地
 54         BufferedOutputStream out = new BufferedOutputStream(
 55                 new FileOutputStream(dest));
 56         // 3,读数据
 57         byte[] buffer = new byte[1024];
 58         int len = -1;
 59         while ((len = in.read(buffer)) != -1) {
 60             // 4,写数据
 61             out.write(buffer, 0, len);
 62         }
 63         // 5,关闭流
 64         in.close();
 65         out.close();
 66     }
 67 
 68     // 方式3: 采用高效的流,一次一个字节的方式复制
 69     private static void method3(String src, String dest) throws IOException {
 70         // 1,指定数据源
 71         BufferedInputStream in = new BufferedInputStream(new FileInputStream(
 72                 src));
 73         // 2,指定目的地
 74         BufferedOutputStream out = new BufferedOutputStream(
 75                 new FileOutputStream(dest));
 76         // 3,读数据
 77         int ch = -1;
 78         while ((ch = in.read()) != -1) {
 79             // 4,写数据
 80             out.write(ch);
 81         }
 82         // 5,关闭流
 83         in.close();
 84         out.close();
 85     }
 86 
 87     // 方式2: 采用基本的流,一个多个字节的方式赋值
 88     private static void method2(String src, String dest) throws IOException {
 89         // 1,指定数据源
 90         FileInputStream in = new FileInputStream(src);
 91         // 2,指定目的地
 92         FileOutputStream out = new FileOutputStream(dest);
 93         // 3,读数据
 94         byte[] buffer = new byte[1024];
 95         int len = -1;
 96         while ((len = in.read(buffer)) != -1) {
 97             // 4,写数据
 98             out.write(buffer, 0, len);
 99         }
100         // 5,关闭流
101         in.close();
102         out.close();
103     }
104 
105     // 方式1: 采用基本的流,一次一个字节的方式复制
106     private static void method1(String src, String dest) throws IOException {
107         // 1,指定数据源
108         FileInputStream in = new FileInputStream(src);
109         // 2,指定目的地
110         FileOutputStream out = new FileOutputStream(dest);
111         // 3,读数据
112         int ch = -1;
113         while ((ch = in.read()) != -1) {
114             // 4,写数据
115             out.write(ch);
116         }
117         // 5,关闭流
118         in.close();
119         out.close();
120     }
121 }

 5、字符缓冲区

  (1)字符缓冲输入流 BufferedReader;

  (2)字符缓冲输出流 BufferedWriter;

  (3)完成文本数据的高效的写入与读取的操作。

6、字符缓冲输出流 BufferedWriter

  (1)将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;

  (2)方法:void newLine() 根据当前的系统,写入一个换行符。

 1 /*
 2  * BufferedWriter 字符缓冲输出流
 3  * 方法
 4  *     public void newLine()写入一个行分隔符
 5  * 
 6  * 需求: 通过缓冲输出流写入数据到文件
 7  * 分析:
 8  *     1,创建流对象
 9  *     2,写数据
10  *     3,关闭流
11  * 
12  */
13 public class BufferedWriterDemo {
14     public static void main(String[] args) throws IOException {
15         //创建流
16         //基本字符输出流
17         FileWriter fileOut = new FileWriter("d:\Java\file.txt");
18         //把基本的流进行包装
19         BufferedWriter out = new BufferedWriter(fileOut);
20         //2,写数据
21         for (int i=0; i<5; i++) {
22             out.write("hello");
23             out.newLine();
24         }
25         //3,关闭流
26         out.close();
27     }
28 }

7、字符缓冲输入流 BufferedReader

  (1)从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取;

  (2)public String readLine() 读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null。

 1 /*
 2  * BufferedReader 字符缓冲输入流
 3  * 
 4  * 方法:
 5  *     String readLine() 
 6  * 需求:从文件中读取数据,并显示数据
 7  */
 8 public class BufferedReaderDemo {
 9     public static void main(String[] args) throws IOException {
10         //1,创建流
11         BufferedReader in = new BufferedReader(new FileReader("d:\Java\file.txt"));
12         //2,读数据
13         //一次一个字符
14         //一次一个字符数组
15         //一次读取文本中一行的字符串内容
16         String line = null;
17         while( (line = in.readLine()) != null ){
18             System.out.println(line);
19         }
20         
21         //3,关闭流
22         in.close();
23     }
24 }

8、使用字符缓冲流完成文本文件的复制

 1 import java.io.BufferedReader;
 2 import java.io.BufferedWriter;
 3 import java.io.FileReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 
 7 /*
 8  * 采用高效的字符缓冲流,完成文本文件的赋值
 9  * 
10  * 数据源:d:\Java\file.txt
11  * 目的地:d:\Java\copyFile.txt
12  * 
13  * 分析:
14  *     1,指定数据源, 是数据源中读数据,采用输入流
15  *     2,指定目的地,是把数据写入目的地,采用输出流
16  *     3,读数据
17  *     4,写数据
18  *     5,关闭流
19  */
20 public class CopyTextFile {
21     public static void main(String[] args) throws IOException {
22         // 1,指定数据源, 是数据源中读数据,采用输入流
23         BufferedReader in = new BufferedReader(new FileReader(
24                 "d:\Java\file.txt"));
25         // 2,指定目的地,是把数据写入目的地,采用输出流
26         BufferedWriter out = new BufferedWriter(new FileWriter(
27                 "d:\Java\copyFile.txt"));
28         // 3,读数据
29         String line = null;
30         while ((line = in.readLine()) != null) {
31             // 4,写数据
32             out.write(line);
33             // 写入换行符号
34             out.newLine();
35         }
36         // 5,关闭流
37         out.close();
38         in.close();
39     }
40 }

完成文本数据的高效的写入与读取的操作

原文地址:https://www.cnblogs.com/gzdlh/p/8097378.html