功能简介

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"));
 
可以指定缓冲区的大小,或者接受默认的大小 在大多数情况下,默认值就足够大了
 

[二十一]JavaIO之BufferedReader 与 BufferedWriter的更多相关文章

  1. java基础知识回顾之javaIO类---BufferedReader和BufferedWriter

    使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. BufferReader: pa ...

  2. Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别

    IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStrea ...

  3. 节点流和处理流(BufferedReader和BufferedWriter,BufferedInputStream和BufferedOutputStream,ObjectlnputStream和objectOutputStream)

    一.基本介绍: 1.节点流可以从一个特定的数据源读写数据,如FileReader. FileWriter 如图:字节流是直接对数据源(文件,数组之类存放数据的地方)进行操作 2.处理流(也叫包装流)是 ...

  4. Java-IO流之BufferedReader 和BufferedWriter的使用和原理

    BufferedReader和BufferedWriter出现的目的是为了对FileReader以及FileWriter的读写操作进行增强,而怎么增强呢,原理类似于使用StringBuilder,是把 ...

  5. Java IO(十八) BufferedReader 和 BufferedWriter

    Java IO(十八) BufferedReader 和 BufferedWriter 一.介绍 BufferedReader 和 BufferedWriter 是字符缓冲流,分别继承自 Reader ...

  6. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  7. BufferedReader与BufferedWriter读写中文乱码问题

    正常读写英文时用""""没问题 FileReader fre = new FileReader("E:\\TEST\\readText.txt&quo ...

  8. Bootstrap <基础二十一>徽章(Badges)

    Bootstrap 徽章(Badges).徽章与标签相似,主要的区别在于徽章的边角更加圆滑. 徽章(Badges)主要用于突出显示新的或未读的项.如需使用徽章,只需要把 <span class= ...

  9. 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】

    <Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和  ...

随机推荐

  1. Python算术运算

    一.算术运算1.四则运算1+(100-20)/4+5*22.乘方运算2**103.求摸运算7%5 4.取整运算  7//5 = 1 5.绝对值函数  abs(-100) 6.导入数学函数后才能执行类似 ...

  2. 使用PIA查找组件的PeopleSoft导航

    导航到企业组件>查找对象导航. 使用组件名称 使用页面名称 使用辅助页面名称 使用内容参考名称 只需输入对象名称,然后单击“搜索”即可.在这个例子中.我们知道组件名称即'PRCSDEFN',我们 ...

  3. .Net Core 部署 CentOs7+Nginx

    先爆图 由于是初学者,部署出来这个界面也不容易,此前第一步弄了个这个出来 动态的没问题,然后静态资源死活就是不出来,弄了两个小时没有结果,带着遗憾睡了个觉 试验1: server { listen ; ...

  4. 使用Ant Build时提示错误: 编码GBK的不可映射字符

    这个build.xml是由eclipse neon 2016.6生成的 我的情况是,所有文件都使用了UTF-8编码,build.xml第一行也好好写着UTF-8,但build时仍然有乱码,并且提示失败 ...

  5. python中的单向循环链表实现

    引子 所谓单向循环链表,不过是在单向链表的基础上,如响尾蛇般将其首尾相连,也因此有诸多类似之处与务必留心之点.尤其是可能涉及到头尾节点的操作,不可疏忽. 对于诸多操所必须的遍历,这时的条件是什么?又应 ...

  6. Redis sentinel 哨兵模式

    一.sentinel介绍 Sentinel作用: 1):Master状态检测 2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Maste ...

  7. VS2017Release+x64失败,LNK1104,无法打开文件"msvcprt.lib"

    采用VS2017+Qt5.10联合开发环境建立开发,将Qt的库包含到VS中使用VS2017的Debug+x64模式调试程序,通过并出现对应的EXE应用程序! 但是转换到Release+x64模式出现问 ...

  8. NFS 系统搭建 - 成功

    NFS是Network File System的缩写,即文件系统.客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下. 工作流程 1.由程序在NFS客户端发起存取文件的请求,客户端本地 ...

  9. 删除 id 列表 存进数据库

    当图片写的传id的时候 用着方法存进数据库

  10. [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]

    之前一段时间都在个人公众号账号“大内老A”发布关于ASP.NET Core的系列文章,很多人留言希望能够同步到这里,所以在这里 对这些文章做一个汇总,以便于PC端阅读.如果说微软官方文档主要关于ASP ...