前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[二十一]JavaIO之BufferedReader 与 BufferedWriter

[二十一]JavaIO之BufferedReader 与 BufferedWriter

作者头像
noteless
发布2018-09-14 14:50:35
5450
发布2018-09-14 14:50:35
举报
文章被收录于专栏:notelessnoteless

功能简介

BufferedReader  从字符输入流中读取文本,内部缓冲各个字符,从而实现字符、数组和行的高效读取

BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个字符、数组和字符串的高效写入

其实本质还是缓冲二字 他们内部都有一个缓冲区,就是一个字符数组 BufferedReader 会尽可能多的将数据读取到自己的缓冲区,然后提供的read方法从缓冲区读取 BufferedWriter 会先将数据写入到自己的内部缓冲区,从而写入的效率将会大大提升,然后批量的将数据实际写入

BufferedReader  BufferedWriter 也是装饰器模式不过他是简化版的装饰器模式没有抽象的装饰器角色BufferedReader 和 BufferedWriter 既充当了抽象的装饰器角色,又充当了装饰器实体角色从下面的声明以及内部变量能看出来一点端倪(不是说  是你还有你  就一定是装饰器,还是要根据下面的业务逻辑的)是你还有你而且,他的确是装饰器模式,下面会简单介绍

构造方法

关键成员变量

首先:BufferedReader  需要 Reader 作为参数BufferedWriter   需要 Writer 作为参数其次:可选的设置缓冲区的大小,不设置则使用默认值 所以, BufferedReader 和 BufferedWriter 各有两个构造方法

BufferedReader 其他方法

read

提供了两个版本的read方法

int read()           读取单个字符 int read(char[] cbuf, int off, int len)           将字符读入数组的某一部分,写入len个 到cbuf 中的off偏移量处

之所以说BufferedReader是装饰器模式不仅仅是"是你还有你"read内部,实际上使用的是fill()用来读取真正的数据到缓冲区内fill 里面用了 Reader in

支持标记

markSupported  返回true mark reset

String readLine() 读取一个文本行通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行

lines方法jdk8 中新增的方法  返回一个由 BufferedReader中的line组成的Stream

BufferedReader也例行提供了 skip ready close

BufferedWriter  其他方法

write

void write(char[] cbuf, int off, int len)           写入字符数组的某一部分 void write(int c)           写入单个字符。 void write(String s, int off, int len)           写入字符串的某一部分

public void newLine()              throws IOException 写入一个行分隔符  行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符

close 与 flush既然是缓冲写字符所以必然要有有效的刷新操作,内部通过out来进行刷新close方法会将缓冲区的数据全部刷新,然后out置空

总结

BufferedReader  和 BufferedWriter 的逻辑含义很明确

使用内部的缓冲区加快速度

BufferedReader 尽可能多的从底层读取数据到缓冲区,所以加快了read方法的调用

BufferedWriter方法数据先是直接写入到缓冲区,所以write方法的速度也显著提高

实现缓冲的根本就在于内部的字符数组

除非的确不需要,否则应该尽可能的使用缓冲,  比如:

BufferedReader in

   = new BufferedReader(new FileReader("foo.in"));

可以指定缓冲区的大小,或者接受默认的大小 在大多数情况下,默认值就足够大了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能简介
  • 构造方法
  • BufferedReader 其他方法
  • BufferedWriter  其他方法
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档