百木园-与人分享,
就是让自己快乐。

io流之【字节/字符缓冲流】

缓冲流,也叫高效流,是对4个基本的Filexxx流的增强,所以也是4个流,按照数据类型分类:

  • 字节缓冲流:BufferedInputStream,BufferedOutputStream
  • 字符缓冲流:BufferedReader,BufferedWriter

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

①字节缓冲流

 1 package com.Lucky.io.BufferStream;
 2 
 3 import java.io.*;
 4 
 5 /*
 6  字节缓冲流: 是字节流的高级流之一【效率比基础的字节流高的多】
 7  格式:       缓冲流  名称 = new 缓冲流(new 基础流)
 8              例如:    BufferedInputStream bufInStr=
 9                                new BufferedInputStream(new FileInputStream());
10 
11  */
12 
13 /**
14  * 其他的跟基础流一样【同样可以使用数组来进行一次读取多个字节】
15  */
16 public class byteBufferStream {
17     public static void main(String[] args) throws IOException {
18         BufferedInputStream bufInStr=
19                 new BufferedInputStream(new FileInputStream(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\bufferTest.txt\"));
20         BufferedOutputStream bufOutStr=
21                 new BufferedOutputStream(new FileOutputStream(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\copy.txt\"));
22 
23          int val;
24         while ((val=bufInStr.read())!=-1){
25             bufOutStr.write(val);
26         }
27 
28         bufOutStr.close();    //不用关闭基础流,因为在缓冲流的底层中已经将基础流进行colse
29         bufInStr.close();
30 
31     }
32 }

②字符缓冲流

 1 package com.Lucky.io.BufferStream;
 2 
 3 import java.io.*;
 4 
 5 /*
 6 字符缓冲流: 是字符流的高级流之一【效率比基础的字符流高一点,因为在字符流中本身就存在缓冲区】
 7  格式:       缓冲流  名称 = new 缓冲流(new 基础流)
 8              例如:           BufferedReader reader=
 9                                            new BufferedReader(new FileReader(\"\"));
10 
11 
12  */
13 
14 /**
15  * 其他的跟基础流一样【同样可以使用数组来进行一次读取多个字节】
16  * 注意点:相对于字符基础流来说,多了2个独有的方法【readLine】一次读取一行数据
17  *                                      【newLine】  换行
18  *
19  */
20 public class charBufferStream {
21     public static void main(String[] args) throws IOException {
22        BufferedReader bufreader=
23                new BufferedReader(new FileReader(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\bufferTest.txt\"));
24        BufferedWriter bufWriter=
25                new BufferedWriter(new FileWriter(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\charBufferTest.txt\"));
26 
27 
28 
29 
30        String val;
31        while ((val=bufreader.readLine())!=null){  //结尾最后返回null
32            System.out.println(val);
33            bufWriter.newLine();   //换行【可以不同的系统中使用不用再使用\\r\\n】
34        }
35 
36 
37        //关闭流
38         bufWriter.close();
39         bufreader.close();
40     }
41 }

综合小练习:

练习一材料:

12.穿上婚纱让朋友见证我们
10.白头偕老是我一生宿愿
14.就让我给你一场想要的最美的婚礼
4.你我在调整着紧张的情绪
7.我想和你结婚做炙热的亲吻
8.我想和在这开始私定终身
1.嘉宾正准备着盛装出席
2.亲眼目睹这一浪漫的婚礼
3.红毯散满花瓣爱情在洋溢
9.香槟塔前许下了誓言
13.礼堂里营造出浪漫气息
11.我想和你结婚做最幸福的人
5.神圣的一刻开始记录珍惜
6.感谢这份爱你我都未缺席
package com.Lucky.io.BufferStream.test;

import java.io.*;
import java.util.*;

/**
 * 练习1:将sort.txt【顺序乱的】的数据排序输出到新的文件中【拷贝数据加排序】
 */
public class sort {
    public static void main(String[] args) throws IOException {
        //创建对象
//        BufferedInputStream in=
//                new BufferedInputStream(new FileInputStream(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\test\\\\sort.txt\"));
        BufferedWriter out=
                new BufferedWriter(new FileWriter(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\test\\\\sortNew.txt\"));
        BufferedReader bufreader=
                new BufferedReader(new FileReader(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\test\\\\sort.txt\"));


        //////////////////解法一:ArrayList/////////////////////////////////
        byte[] arr=new byte[1024];
        String  val;
        ArrayList<String> li=new ArrayList<>();
        while ((val=bufreader.readLine())!=null){
            li.add(val);
        }
        //System.out.println(li);
        li.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int min=Integer.parseInt(o1.split(\"\\\\.\")[0]);
                int max=Integer.parseInt(o2.split(\"\\\\.\")[0]);
                return min-max;
            }
        });
        System.out.println(li);

        //写出数据
        for (String s : li) {
            out.write(s);
            out.newLine();  //换行
        }


        //关闭流
        out.close();
        bufreader.close();



        //////////////////解法二:TreeMap自动排序/////////////////////////////////
//        TreeMap<Integer,String> map=new TreeMap<>();
//        while ((val=bufreader.readLine())!=null){
//            int i = Integer.parseInt(val.split(\"\\\\.\")[0]);
//            map.put(i,val);
//        }
//        Set<Map.Entry<Integer, String>> entries = map.entrySet();
//        for (Map.Entry<Integer, String> entry : entries) {
//            String value = entry.getValue();
//            out.write(value);
//            out.newLine();
//        }
//
//        out.close();
//        bufreader.close();

    }
}

练习2材料:

testCount.txt文件的初始数据是 ---》  0

 1 package com.Lucky.io.BufferStream.test;
 2 
 3 import java.io.*;
 4 
 5 /*
 6 练习2: 定义一个小程序,要求前面三次免费运行,第四次开始要提示开通会员使用
 7 
 8 注意点:字符流的读取/写出对象创建【如果指定相同的路径就注意】不要写到一起
 9        因为,在创建写出对象时,会将原来路径的内容清空
10  */
11 
12 /**
13  * 每天一个小知识: IO的使用原则:
14  *                          ★什么时候用就什么时候创建
15  *                          ★用完就立马关闭
16  */
17 public class SMG {
18     public static void main(String[] args) throws IOException {
19         //创建读取文件对象
20         BufferedReader reader=
21                 new BufferedReader(new FileReader(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\test\\\\testCount.txt\"));
22         //获取行数据
23         String s = reader.readLine();
24         //类型转换
25         int i = Integer.parseInt(s);
26         i++;
27         reader.close();
28         //判断次数
29         if(i<4){
30             System.out.println(\"运行了\"+i+\"次\");
31         }else {
32             System.out.println(\"本次第\"+i+\"运行,只能免费运行\"+\"3次\");
33         }
34 
35         //创建写出对象
36         BufferedWriter writer=
37                 new BufferedWriter(new FileWriter(\"H:\\\\项目\\\\javaSE\\\\IO\\\\src\\\\com\\\\Lucky\\\\io\\\\BufferStream\\\\test\\\\testCount.txt\"));
38        //将新的值写出到文件中
39         writer.write(i+\"\");
40         writer.close();
41 
42     }
43 }

 


来源:https://www.cnblogs.com/Lucky-only/p/16970818.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » io流之【字节/字符缓冲流】

相关推荐

  • 暂无文章