• java BufferedReader类、BufferedWriter类


    1、BufferedReader类

    类型概述

    Java BufferedReader类用于从基于字符的输入流中读取文本。它可用于通过readLine() 方法逐行读取数据。它使性能更快。

    构造方法

    BufferedReader(Reader in)
    
    • 1

    创建一个使用默认大小的输入缓冲区的缓冲字符(char,一个字符为两个字节)输入流。

    BufferedReader(Reader in, int sz)
    
    • 1

    创建一个使用指定大小的输入缓冲区的缓冲字符输入流。

    对象方法

    1、close函数

    void close()
    
    • 1

    关闭当前的缓冲字符输入流并释放相关的资源。

    2、read函数

    int read()
    
    • 1

    读取一个字符char并以整数int形式返回。整数int对应的字符char在ascall码表上的值。

    int read(char cbuf[], int off, int len)
    
    • 1

    将最多length个字符读入数组中,返回实际读入的字符个数,当读取到文件末尾时,返回-1,

    3、read_line函数

    String readLine()
    
    • 1

    从标准输入中读取一行,并返回一个字符串。

    4、skip函数

    long skip(long n)
    
    • 1

    跳过指定的字符数,返回实际跳过的字符数。

    使用示例

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Test1 {
        public static void main(String[] args) throws IOException {
       		// 构造一个BufferedReader对象,使用默认的缓冲区大小。
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            // 跳过2个字节再进行读取
            long n = bufferedReader.skip(2);
            // 将int转换成char
            char c = (char)bufferedReader.read();
    
            System.out.println(n);
            System.out.println(c);
            // 关闭流,关闭之后不能再使用read()、read_line()等方法,否则会抛出IOException
            bufferedReader.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    当在控制台输入abced时,输出的结果为c。

    InputStreamReader中的文档说明提到过:为了获得最高效率,请考虑在BufferedReader中包装InputStreamReader!!!

    从read()方法理解,若使用InputStreamReader的read()方法,可以发现存在每2次就会调用一次解码器解码,但若是使用 BufferedReader包装InputStreamReader后调用read()方法,可以发现只会调用一次解码器解码,其余时候都是直接从BufferedReader的缓冲区中取字符即可

    从read(char cbuf[], int offset, int length)方法理解,若使用InputStreamReader的方法则只会读取leng个字符,但是使用BufferedReader类则会读取读取8192个字符,会尽量提取比当前操作所需的更多字节;

    例如文件中有20个字符,我们先通过read(cbuf,0,5)要读取5个字符到数组cbuf中,然后再通过read()方法读取1个字符。那么使用InputStreamReader类的话,则会调用一次解码器解码然后存储5个字符到数组中,然后又调用read()方法调用一次解码器读取2个字符,然后返回1个字符;等于是调用了2次解码器,若使用BufferedReader类的话则是先调用一次解码器读取20个字符到字符缓冲区中,然后复制5个到数组中,在调用read()方法时,则直接从缓冲区中读取字符,等于是调用了一次解码器

    因此可以看出BufferedReader类会尽量提取比当前操作所需的更多字节,以应该更多情况下的效率提升,

    因此在设计到文件字符输入流的时候,我们使用BufferedReader中包装InputStreamReader类即可

    2、BufferedWriter类

    类型概述

    Java BufferedWriter类用于为Writer实例提供缓冲。它使性能更快。它继承了Writer类。缓冲字符用于有效地写入单个数组,字符和字符串。

    构造方法

    BufferedWriter(Writer out)
    
    • 1

    创建一个使用默认大小(8192字符)的输出缓冲区的缓冲字符输出流。

    BufferedWriter(Writer out, int sz)
    
    • 1

    创建一个使用指定大小的输出缓冲区的缓冲字符输出流。

    对象方法

    1、close函数

    void close()
    
    • 1

    关闭缓冲输出流。

    2、flush函数

    void flush()
    
    • 1

    清空缓冲输出流。

    3、write函数

    void write(char[] cbuf, int off, int len)
    
    • 1

    将字符数组的部分写入缓冲区。

    void write(char[] cbuf)
    
    • 1

    将字符数组写入缓冲区。

    void write(int c)
    
    • 1

    将单个字符写入缓冲区。

    void write(String s, int off, int len)
    
    • 1

    将一个字符串写入缓冲区。

    4、newLine函数

    void newLine()
    
    • 1

    将一个行分隔符写入缓冲区。

    使用示例

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    
    public class Test {
        public static void main(String[] args) throws IOException {
        	// 从标准输入流中创建一个缓冲输入流
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            // 读取一行数据
            String s = bufferedReader.readLine();
    		// 从标准输出流中创建一个缓冲输出流
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
            // 写入刚才读入的字符串
            bufferedWriter.write(s);
            // 写入一个换行符
            bufferedWriter.newLine();
    		// 关闭缓冲流
            bufferedReader.close();
            bufferedWriter.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    输入:

    abcde
    
    • 1

    输出("\n"不可见):

    abcde\n
    
    • 1
  • 相关阅读:
    json/xml/schema
    LeetCode:1672.最富有客户的资产总量
    Excel - 学习 - 笔记5: Excel 函数 - vlookup 函数
    递归 函数
    【MindSpore易点通】如何迁移PyTorch代码并在Ascend上实现单机单卡训练
    7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位
    26-网络通信
    基于训练和推理场景下的MindStudio高精度对比
    氨基NH2/羧基COOH修饰/偶联/接枝NaY(Gd/Lu/Nd)F4:Yb,Tm核壳上转换纳米粒子
    音视频开发是不是C++开发中最难的细分方向?
  • 原文地址:https://blog.csdn.net/weixin_49346755/article/details/125881811