java BufferedReader类、BufferedWriter类

1、BufferedReader类

类型概述

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

构造方法

BufferedReader(Reader in)

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

BufferedReader(Reader in, int sz)

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

对象方法

1、close函数
void close()

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

2、read函数
int read()

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

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

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

3、read_line函数
String readLine()

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

4、skip函数
long skip(long n)

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

使用示例

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();
    }
}

当在控制台输入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)

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

BufferedWriter(Writer out, int sz)

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

对象方法

1、close函数
void close()

关闭缓冲输出流。

2、flush函数
void flush()

清空缓冲输出流。

3、write函数
void write(char[] cbuf, int off, int len)

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

void write(char[] cbuf)

将字符数组写入缓冲区。

void write(int c)

将单个字符写入缓冲区。

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

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

4、newLine函数
void newLine()

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

使用示例

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();
    }
}

输入:

abcde

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

abcde\n
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值