zoukankan      html  css  js  c++  java
  • 缓冲流---Day33

    缓冲流:

      概念:缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流

      分类:

        1.字节缓冲流:BufferedInputStream , BufferedOutputStream 

        2.字符缓冲流:BufferedReader , BufferedWriter

      基本原理:缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。 

    字节缓冲流:

      构造方法:

        public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。

        public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。

     1 package demo_summary.buffer_flow;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileOutputStream;
     5 
     6 public class ByteStream {
     7     /**
     8      * public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。
     9      * public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。
    10      *
    11      * 效率测试
    12      */
    13     public static void main(String[] args) {
    14         //记录开始时间
    15         long start = System.currentTimeMillis();
    16         //创建流对象
    17         try {
    18             FileInputStream fis = new FileInputStream(".//src//demo_summary//buffer_flow//tmp//jdk9.txt");
    19             FileOutputStream fos = new FileOutputStream(".//src//demo_summary//buffer_flow//tmp//copy.txt");
    20             //读写数据
    21             int b;
    22             while ((b = fis.read()) != -1) {
    23                 fos.write(b);
    24             }
    25         } catch (Exception e) {
    26             e.printStackTrace();
    27         }
    28 
    29         long end = System.currentTimeMillis();
    30         System.out.println("普通流复制时间:"+(end-start)+"毫秒");
    31         /**
    32          * 执行结果:普通流复制时间:30毫秒
    33          */
    34     }
    35 }
     1 package demo_summary.buffer_flow;
     2 
     3 import java.io.*;
     4 
     5 public class ByteBufferStream {
     6     public static void main(String[] args) {
     7         //记录开始时间
     8         long start = System.currentTimeMillis();
     9         //创建缓冲流对象
    10         try {
    11             BufferedInputStream bis = new BufferedInputStream(new FileInputStream(".//src//demo_summary//buffer_flow//tmp//jdk9.txt"));
    12             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(".//src//demo_summary//buffer_flow//tmp//copy1.txt"));
    13             //读写数据
    14             int b;
    15             while ((b = bis.read()) != -1) {
    16                 bos.write(b);
    17             }
    18         } catch (Exception e) {
    19             e.printStackTrace();
    20         }
    21         //记录结束时间
    22         long end = System.currentTimeMillis();
    23         //打印消耗时间
    24         System.out.println("缓冲流复制时间:"+(end-start)+"毫秒");
    25         /**
    26          * 执行结果:缓冲流复制时间:5毫秒
    27          */
    28     }
    29 }
     1 package demo_summary.buffer_flow;
     2 
     3 import java.io.*;
     4 
     5 public class BytesBufferStream {
     6     public static void main(String[] args) {
     7         long start = System.currentTimeMillis();
     8         try {
     9             BufferedInputStream bis = new BufferedInputStream(new FileInputStream(".//src//demo_summary//buffer_flow//tmp//jdk9.txt"));
    10             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(".//src//demo_summary//buffer_flow//tmp//copy2.txt"));
    11             int len;
    12             byte[] bytes = new byte[8 * 1024];
    13             while ((len = bis.read(bytes)) != -1) {
    14                 bos.write(bytes,0,len);
    15             }
    16         } catch (Exception e) {
    17             e.printStackTrace();
    18         }
    19         long end = System.currentTimeMillis();
    20         System.out.println("缓冲流使用数组复制时间:"+(end-start)+"毫秒");
    21     }
    22     /**
    23      * 执行结果:缓冲流使用数组复制时间:2毫秒
    24      */
    25 }

    字符缓冲流:

      构造方法:

        public BufferedReader(Reader in) :创建一个新的缓冲输入流。

        public BufferedWriter(Writer out) : 创建一个新的缓冲输出流

      特有方法:

        BufferedReader: public String readLine() : 读一行文字。

        BufferedWriter: public void newLine() : 写一行行分隔符,由系统属性定义符号

     1 package demo_summary.buffer_flow;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.FileReader;
     5 
     6 public class BufferReadLine {
     7     public static void main(String[] args) {
     8         try {
     9             //创建流对象
    10             BufferedReader br = new BufferedReader(new FileReader(".//src//demo_summary//buffer_flow//tmp//jdk9.txt"));
    11             //读取数据,一行读取
    12             String line;
    13             while ((line = br.readLine()) != null) {
    14                 System.out.println(line);
    15                 System.out.println("------");
    16             }
    17         } catch (Exception e) {
    18             e.printStackTrace();
    19         }
    20     }
    21 
    22     /**
    23      * 执行结果:
    24      * 黑马程序员
    25      * ------
    26      * 传智博客
    27      * ------
    28      * Java程序员
    29      * ------
    30      * python程序员
    31      * ------
    32      */
    33 }
     1 package demo_summary.buffer_flow;
     2 
     3 import java.io.BufferedWriter;
     4 import java.io.FileWriter;
     5 
     6 public class BufferWriteLine {
     7     public static void main(String[] args) {
     8         try {
     9             BufferedWriter bw = new BufferedWriter(new FileWriter(".//src//demo_summary//buffer_flow//tmp//out.txt"));
    10             //写出数据
    11             bw.write("北京");
    12             //写出换行
    13             bw.newLine();
    14 
    15             bw.write("老男孩");
    16             bw.newLine();
    17 
    18             bw.write("教育");
    19             bw.newLine();
    20             //释放资源
    21             bw.close();
    22         } catch (Exception e) {
    23             e.printStackTrace();
    24         }
    25     }
    26     /**
    27      * 执行结果:
    28      * 北京
    29      * 老男孩
    30      * 教育
    31      */
    32 }

    案例:

     1 package demo_summary.buffer_flow;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.FileReader;
     6 import java.io.FileWriter;
     7 import java.util.HashMap;
     8 
     9 public class BufferStreamTest {
    10     public static void main(String[] args) {
    11         try {
    12             //6.创建一个map集合
    13             HashMap<String, String> map = new HashMap<>();
    14             //1.创建读取文件内容流对象
    15             BufferedReader br = new BufferedReader(new FileReader(".//src//demo_summary//buffer_flow//tmp//in.txt"));
    16             //2.创建写入文件内容流对象
    17             BufferedWriter bw = new BufferedWriter(new FileWriter(".//src//demo_summary//buffer_flow//tmp//out.txt"));
    18             //3.定义字符串来逐行读取
    19             String line;
    20             //4.循环读取
    21             while ((line = br.readLine()) != null) {
    22                 //5.根据文本内容特点来分割字符串
    23                 String[] split = line.split("\.");
    24                 //7.把分割的字符串加入map集合中
    25                 map.put(split[0], split[1]);
    26             }
    27             //8.遍历map集合
    28             for (int i = 1; i <= map.size(); i++) {
    29                 //9.获取map集合中的key,也就是文本内容的前的数字
    30                 String key = String.valueOf(i);
    31                 //10.根据获取的key来获取文本的文字
    32                 String value = map.get(key);
    33                 //11.把重新获取的文本组合
    34                 bw.write(key + "." + value);
    35                 bw.newLine();
    36             }
    37             //释放资源
    38             br.close();
    39             bw.close();
    40         } catch (Exception e) {
    41             e.printStackTrace();
    42         }
    43         /**
    44          * 执行前:
    45          * 3.侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。
    46          * 8.愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
    47          * 4.将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
    48          * 2.宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
    49          * 1.先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外 者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
    50          * 9.今当远离,临表涕零,不知所言。
    51          * 6.臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
    52          * 7.先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐付托不效,以伤先帝之明,故五月渡泸,深入不毛。 今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
    53          * 5.亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息 痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。
    54          *
    55          * 执行后:
    56          * 1.先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外 者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
    57          * 2.宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
    58          * 3.侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。
    59          * 4.将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
    60          * 5.亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息 痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。
    61          * 6.臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
    62          * 7.先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐付托不效,以伤先帝之明,故五月渡泸,深入不毛。 今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
    63          * 8.愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
    64          * 9.今当远离,临表涕零,不知所言。
    65          */
    66     }
    67 }
  • 相关阅读:
    POJ 2723 Get Luffy Out(2-SAT)
    ZOJ 3613 Wormhole Transport
    HDU 4085 Peach Blossom Spring
    NBUT 1221 Intermediary
    NBUT 1223 Friends number
    NBUT 1220 SPY
    NBUT 1218 You are my brother
    PAT 1131. Subway Map (30)
    ZSTU OJ 4273 玩具
    ZSTU OJ 4272 最佳淘汰算法
  • 原文地址:https://www.cnblogs.com/hpcz190911/p/12151102.html
Copyright © 2011-2022 走看看