频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
Java IO深入理解BufferedReader(代码实例)
2018-02-13 11:08:38      个评论    来源:yhl_jxy的博客  
收藏   我要投稿

一 BufferedReader概述

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

BufferedReader的作用是为其他字符输入流添加一些缓冲功能。

创建BufferReader时,我们会通过它的构造函数指定某个Reader为参数。

BufferReader会将该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 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.lanhuigu.io.buffered;

import java.io.*;

public class TestBufferedReader {

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

}
点击复制链接 与好友分享!回本站首页
上一篇:java 包装类,final修饰符,不可变类知识点讲解
下一篇:Java IO深入理解BufferedWriter(代码实例)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站