• 解析java中的缓冲字符输入流


    解析java中的缓冲字符输入流

    1 含义

    缓冲字符流为BufferedReader,它是处理流(包装流),实现了reader接口
    在这里插入图片描述

    2 作用

    通过处理流的方式去对字符数据进行操作,相对于节点流效率较高(有8kb的char数组

    且有readLine方法)

    3 如何用

    3.1 构造方法

    BufferReader(Reader接口的实现节点类)

    ​ 需要传入一个FileReader对象,对磁盘中的外部文件进行读取到内存中的操作

    这个FileReader对象有的普通方法,都可以通过BufferReader.方法名去进行调用

    如果想要追加的话,同样是在new FileReader对象的时候,使第二个参数传入true

    这是典型的面向接口编程的思想

    3.2 使用方法

    3.1 每次只读取一个字符文件

    3.1.1 核心思路
    a 声明一个缓冲字符输入流BufferedReader对象,并赋值为null
    b 声明一个文件字符输入流FileReader对象,并赋值为null
    c.实例化缓冲字符流对象,然后再调用构造方法的时候,传入一个刚刚实例好的文件字符输入流对象
    d 通过缓冲字符流对象.read()方法去循环读取(返回值不为-1时就继续读取),读取的时候也需要处理异常
    d 通过强转把ascil的数字转换成对应的字符
    e 最后在finally语句中对缓冲字符输入流对象进行非空判断,若不为null则需要通过对象名.close()方法去关闭这个缓冲字符输入流(不关闭会造成资源的浪费),在关闭的时候也要去try…catch去捕获异常
    注意:缓冲字符输入流对象.close方法本质还是调用了文件字符输入流对象进行关闭

    在这里插入图片描述
    在这里插入图片描述

    3.1.2 示例代码
    temp.txt文件内容

    在这里插入图片描述

    BufferdReaderTest类
    package Work4;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class BufferReaderTest {
        public static void main(String[] args) {
            //缓冲字符输入流,这个默认里面就有一个8kb的char数组,readLine方法可以一次读取一行
            BufferedReader br=null;
            FileReader fr=null;
            try {
                fr=new FileReader("src/Work06/temp.txt");
                br=new BufferedReader(fr);
                int readData=0;
                while((readData=br.read())!=-1){
                    System.out.print((char) readData);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fr != null) {
                    try {
                        //底层还是构造方法传入的节点流对象自己调用.close方法进行关闭操作的
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    3.1.3 示例代码运行截图

    在这里插入图片描述

    3.2 以char数组读取后,打印有效信息(截取)

    3.2.1 核心思路
    a.声明一个缓冲字符输入流对象BufferReader,并给其赋值为null
    a 声明一个文件字符输入流对象FileReader,并给其赋值为null
    b 实例化文件字符输入流对象fr,在实例化缓冲字符输入流的过程中,需要给构造方法传入文件字符输入流对象fr
    c.建立一个较大的容量(长度)的char数组,通过read(chars)用于一次性获取char数组长度的元素(数量足够的情况下),若数量不够,把剩下的元素放入char数组,覆盖上一次的结果,使用read方法的时候需要去捕获异常
    d 把read(chars)的返回值用一个变量去readLen(新数据/有效数据个数)去接收
    e 然后在通过new String(chars,0,readLen)筛选得到有效数据(新数据),然后进行循环遍历打印即可
    f.在finally语句中里面判断缓冲字符输入流对象,若不为空,就需要对象名.close()去进行关闭缓冲字符输入流这个操作,用close方法还需要去try…catch捕获异常
    3.2.2 示例代码

    temp.txt
    在这里插入图片描述

    BufferedReaderTest类

    package Work4;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class BufferReaderTest {
        public static void main(String[] args) {
            //缓冲字符输入流,这个默认里面就有一个8kb的char数组,readLine方法可以一次读取一行
            BufferedReader br=null;
            FileReader fr=null;
            try {
                fr=new FileReader("src/Work06/temp.txt");
                br=new BufferedReader(fr);
                char[] chars=new char[8];
                int readLen=0;
                while((readLen=br.read(chars))!=-1){
                    System.out.print(new String(chars,0,readLen));
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fr != null) {
                    try {
                        //底层还是构造方法传入的节点流对象自己调用.close方法进行关闭操作的
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    3.2.3 示例代码运行截图

    在这里插入图片描述

    3.3 每次读取一行(不含换行符)

    3.3.1 核心思路
    a 声明一个缓冲字符输入流BufferedReader对象,并赋值为null
    b 声明一个文件字符输入流FileReader对象,并赋值为null
    c.实例化缓冲字符流对象,然后再调用构造方法的时候,传入一个实例化的文件字符输入流的对象
    d 通过缓冲字符流对象.readLine()方法去循环读取每一行(返回值不为null时就继续读取),读取的时候也需要处理异常
    e 直接System.out.println(readLen);//打印每一行的内容并进行换行
    f 最后在finally语句中对缓冲字符输入流对象进行非空判断,若不为null则需要通过对象名.close()方法去关闭这个缓冲字符输入流(不关闭会造成资源的浪费),在关闭的时候也要去try…catch去捕获异常
    注意:缓冲字符输入流对象.close方法本质还是调用了文件字符输入流对象进行关闭
    3.3.2 示例代码
    temp.txt文件内容

    在这里插入图片描述

    BufferdReaderTest类
    package Work4;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class BufferReaderTest {
        public static void main(String[] args) {
            //缓冲字符输入流,这个默认里面就有一个8kb的char数组,readLine方法可以一次读取一行
            BufferedReader br=null;
            FileReader fr=null;
            try {
                fr=new FileReader("src/Work06/temp.txt");
                br=new BufferedReader(fr);
                String readLen=null;
                //存放每次读取的一行字符串
                while((readLen=br.readLine())!=null){
                    System.out.println(readLen);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fr != null) {
                    try {
                        //底层还是构造方法传入的节点流对象自己调用.close方法进行关闭操作的
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    3.3.3 示例代码运行截图

    在这里插入图片描述

  • 相关阅读:
    JavaScript 64 JavaScript 函数 64.6 JavaScript 闭包
    ChinaSoft 论坛巡礼 | 安全攸关软件的智能化开发方法论坛
    【无标题】【Koltin Flow(三)】Flow操作符之中间操作符(二)
    51单片机-让一个LED灯闪烁、流水灯(涉及:设置单片机的延迟函数)
    C++多线程学习06 利用RAII
    大文件断点续传工具类
    信息的浏览
    Vue框架总结(二、Vue计算属性与监听属性)
    els 方块显示原理
    用动态表动态生成DEV Gridview
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/126185778