【IO】BufferedReader

前言

Github:https://github.com/yihonglei/jdk-source-code-reading(java-io)

一 BufferedReader 概述

BufferedReader是缓冲字符输入流,它继承于Reader。 

BufferedReader的作用是为其他字符输入流添加一些缓冲功能。创建BufferedReader时,我们会通过它的构造函数指定某个Reader为参数。

BufferedReader会将该Reader中的数据分批读取,每次读取一部分到缓冲中,操作完缓冲中的这部分数据之后,再从Reader中读取下一部分的数据,

当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。

如果缓冲区数据不足,才会再从文件中读取。为什么需要缓冲呢?

缓冲中的数据实际上是保存在内存中,而原始数据可能是保存在硬盘或NandFlash中;而我们知道,从内存中读取数据的速度比从硬盘

读取数据的速度至少快10倍以上。为什么不一次性将全部数据都读取到缓冲中呢?

第一,读取全部的数据所需要的时间可能会很长。

第二,内存价格很贵,容量不像硬盘那么大。

从字符输入流读取文本,缓冲字符,以便有效地读取字符、数组和行。

可以指定缓冲区大小,也可以使用默认大小。默认值足够大,大多数情况下均能支持。

一般来说,读取器读取的每个请求都会引起相应的读请求,由底层字符或字节流构成。

例如:

BufferedReader = new BufferedReade(FileReader("foo"));

如果从指定文件缓冲输入,每次调用read()或readline()可能导致数据被从文件读取,转换成文字,然后返回,

这样做效率非常低,因为会多次与硬盘交互。BufferedReader 则比较高效,相对于一个字符/字节地读取、转换、返回来说,

它有一个缓冲区,读满缓冲区才返回;一般情况下,都建议使用它们把其它Reader/InputStream包起来,

使得读取数据更高效。

二 BufferedReader 构造器和方法分析

构造器

public BufferedReader(Reader in);

根据Reader创建BufferedReader使用默认大小的输入缓冲区的缓冲字符输入流。

public BufferedReader(Reader in, int sz);

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

重要方法

void close();

关闭缓冲输入流。

Stream<String> lines();

从BufferedReader中读取字符流以线性元素返回。

void mark(int readAheadLimit);

标记当前流读取的位置。

boolean markSupported();

判断是否支持mark操作

int read();

读取一个字符。

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

读取指定长度的字符。

String readLine();

读取下一个元素。

boolean ready();

是否为只读。

void reset();

重置文件读取位置。

long skip(long n);

跳过多少个字符位置。

三 BufferedReader 实例

package com.jpeony.io.readerwriter;

import java.io.*;

/**
 * @author yihonglei
 */
public class BufferedReaderSimple {

    public static void main(String[] args) {
        // 指定构建文件
        File file = new File("C:\\mycode\\hello.txt");
        // 创建字符输入流
        try (FileReader reader = new FileReader(file);
             BufferedReader br = new BufferedReader(reader)) {
            // 自定义字符数组
            char[] data = new char[1024];
            // 读取文件
            br.read(data);
            // 输出文件内容
            System.out.println("文件内容;" + new String(data));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值