zoukankan      html  css  js  c++  java
  • [二十一]JavaIO之BufferedReader 与 BufferedWriter

    功能简介

    BufferedReader  从字符输入流中读取文本,内部缓冲各个字符,从而实现字符、数组和行的高效读取
    BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
     
    其实本质还是缓冲二字
    他们内部都有一个缓冲区,就是一个字符数组
    BufferedReader 会尽可能多的将数据读取到自己的缓冲区,然后提供的read方法从缓冲区读取
    BufferedWriter 会先将数据写入到自己的内部缓冲区,从而写入的效率将会大大提升,然后批量的将数据实际写入
     
     
    BufferedReader  BufferedWriter 也是装饰器模式
    不过他是简化版的装饰器模式
    没有抽象的装饰器角色
    BufferedReader 和 BufferedWriter 既充当了抽象的装饰器角色,又充当了装饰器实体角色
    从下面的声明以及内部变量能看出来一点端倪(不是说  是你还有你  就一定是装饰器,还是要根据下面的业务逻辑的)

    是你还有你
    而且,他的确是装饰器模式,下面会简单介绍
    image_5b9a4aee_1d00

    构造方法


    关键成员变量
    image_5b9a4aee_6a9

    首先:
    BufferedReader  需要 Reader 作为参数
    BufferedWriter   需要 Writer 作为参数
    其次:
    可选的设置缓冲区的大小,不设置则使用默认值

    所以, BufferedReader 和 BufferedWriter 各有两个构造方法 
     
    image_5b9a4aee_40d1
     

    BufferedReader 其他方法

     

    read
    提供了两个版本的read方法
    int read()
              读取单个字符
    int read(char[] cbuf, int off, int len)
              将字符读入数组的某一部分,写入len个 到cbuf 中的off偏移量处
     
    之所以说BufferedReader是装饰器模式不仅仅是"是你还有你"
    read内部,实际上使用的是fill()用来读取真正的数据到缓冲区内
    fill 里面用了 Reader in

    image_5b9a4aee_5c21
     
     
     
    支持标记
    markSupported  返回true
    mark
    reset
     
     
    String readLine()
    读取一个文本行
    通过下列字符之一即可认为某行已终止:换行 (' ')、回车 (' ') 或回车后直接跟着换行
     
     
    lines方法
    jdk8 中新增的方法 
    返回一个由 BufferedReader中的line组成的Stream
    image_5b9a4aee_5f45
     
     
    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 定义,并且不一定是单个新行 (' ') 符
     
    close 与 flush
    既然是缓冲写字符
    所以必然要有有效的刷新操作,内部通过out来进行刷新
    close方法会将缓冲区的数据全部刷新,然后out置空


    image_5b9a4aef_7f51

    image_5b9a4aef_68b2
     
     

    总结

     
    BufferedReader  和 BufferedWriter 的逻辑含义很明确
    使用内部的缓冲区加快速度
    BufferedReader 尽可能多的从底层读取数据到缓冲区,所以加快了read方法的调用
    BufferedWriter方法数据先是直接写入到缓冲区,所以write方法的速度也显著提高
     
    实现缓冲的根本就在于内部的字符数组
     
    除非的确不需要,否则应该尽可能的使用缓冲,  比如:
    BufferedReader in
       = new BufferedReader(new FileReader("foo.in"));
     
    可以指定缓冲区的大小,或者接受默认的大小 在大多数情况下,默认值就足够大了
     
  • 相关阅读:
    「SAM」你的名字
    「疫期颓废」2
    「疫期颓废」1
    代码覆盖率简单介绍
    解决git报ssh variant 'simple' does not support setting port
    接口自动化基本流程和测试思路
    wait和sleep的区别
    vm垃圾回收算法的简单理解
    TCP-三次握手和四次挥手简单理解
    浏览器输入一个url 中间经历的过程
  • 原文地址:https://www.cnblogs.com/noteless/p/9642568.html
Copyright © 2011-2022 走看看