zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    Luogu P5853 [USACO19DEC]Tree Depth P
    Luogu P6009 [USACO20JAN]Non-Decreasing Subsequences P
    HDU6309 Absolute
    Luogu P4734 [BalticOI 2015]Hacker
    Gym102431F Ferry
    Gym102431G Game on the Tree
    AGC018F Two Trees
    Gym102268D Dates
    AGC023F 01 on Tree
    CF700E Cool Slogans
  • 原文地址:https://www.cnblogs.com/gzdlh/p/8097378.html
Copyright © 2011-2022 走看看