转载请注明源出处:http://www.cnblogs.com/lighten/p/7071733.html

1.前言

  之前的章节已经将Java8的io包中的字节流介绍完毕了。本章开始介绍Java的IO中另一个重要的体系,字符流。字节是给计算机看的,字符才是人能够认识的,可想而知字符流的重要性。字符流体系的根源在于抽象父类Reader和Writer。一切都起源于这两个类。

2.Reader

  Reader实现了Readable和Closeable接口,这两个接口从JDK1.5开始出现。Reader的结构其实和InputStream很像,如下:

  稍有不同的地方就是:lock对象锁和read(CharBuffer)这个Readable接口需要实现的方法,ready()对比于InputStream中的available()了。lock是一个Object对象,其作用是用于流中的同步操作,为了高效通常使用其它的对象,而不是流对象本身(this。同步锁使用this对象效率会差?Get一个新的知识点了)。Reader与InputStream最大的不同就在于Reader需要子类实现的方法是read(char[], int, int),InputStream是read()。这也很好理解,因为Reader字符流更关注的是字符,可以是多个字节,InputStream关注的是字节,所以是需要实现read()方法。

  通过read(char[], int, int)方法,读取一个字符数组,存入所给的CharBuffer中。

  read()也是借助了read(char[],int, int)方法。

  maxSkipBufferSize默认是8192,所以一次最多跳过这么多个字符。其它的放啊就是不支持重置,close方法要自己处理了。

3.Writer

  Writer的差异与OutputStream就大不相同了,结构如下:

  其需要实现的方法就是write(char[],int,int),flush()和close()方法。append方法都来自于其实现的Appendable接口。默认的WRITE_BUFFER_SIZE是1024个。

  实现都比较简单,看一下就能看明白的,这里不做详细描述。上面的结构也能看出其针对的就是字符流了。写都是字符或字符串。append方法其实也是调用了这些方法。

Java之IO(十)Reader和Writer的更多相关文章

  1. Java之IO(十四)IO包中其它类

    转载请注明出处:http://www.cnblogs.com/lighten/p/7267553.html 1.前言 此章介绍IO包中剩余未介绍的几个流和工具类,包括LineNumberReader. ...

  2. Java之IO(十二)CharArrayReader和CharArrayWriter

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7082668.html 1.前言 本章介绍字符数组流,作用和ByteArrayInputStream字节数组流相同 ...

  3. Java之IO(零)总结

    转载请注明原出处:http://www.cnblogs.com/lighten/p/7274378.html 1.前言 本章是对之前所讲述的整个Java的IO包的一个总结,抽出个人认为比较重要的知识点 ...

  4. Java IO: Reader And Writer

    原文链接 作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) Java IO的Reader和Writer除了基于字符之外,其他方面都与InputStre ...

  5. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  6. Java IO: Reader和Writer

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Reader 原文链接 Reader是Java IO中所有Reader的基类.Reader与Input ...

  7. Java I/O(三)各种Reader和Writer读写器、RandomAccessFile随机访问文件、序列化

    2019 01/01 八.Reader和Writer读写器 前面讲的输入输出流的基本单位都是字节,因此可以称为“字节流”,读写器是以字符为基本单位,可以称为“字符流”.它们的使用方法非常相似,因此我考 ...

  8. 十八、Java基础--------IO流体系以及字符流

    在上一章节中详细介绍集合框架的相关知识,在接下来的几篇文章中将讲述Java中另一个及其重要的知识——IO流,本文主要是讲述IO流的一些基本概念以及字符流的相关应用. IO流 介绍IO流之前先介绍一下什 ...

  9. Java IO (3) - Reader

    Java IO (3) - Reader 前言 JavaIO一共包括两种,一种是stream,一种是reader/writer,每种又包括in/out,所以一共是四种包.Java 流在处理上分为字符流 ...

随机推荐

  1. 马婕 2014年MBA,mpacc备考 报刊宣读2 美国对互联网的控制威胁着网络自由(转)

    http://blog.sina.com.cn/s/blog_3e66af4601015qmk.html US controls threaten Internet freedom 美国对互联网的控制 ...

  2. Django模型层(1)

    https://www.cnblogs.com/yuanchenqi/articles/8933283.html MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦, ...

  3. mybatis后台中传参到sql语句中,使用@Param注解

  4. Python 正斜杠/与反斜杠\

    首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Wi ...

  5. 字符串"k:1“” 处理成字典 {'k':1,'k1':2....}

    1.有字符串"k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....} #第一种方法 s1 = "k:1|k1:2|k2:3|k3:4&q ...

  6. 201709021工作日记--CAS解读

    CAS主要参考博文:classtag  http://www.jianshu.com/p/473e14d5ab2d CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术 ...

  7. python网络编程应用(一)

     在之前的一篇博客<python网络编程基础>中介绍了socket.socket()函数及其应用,其实socket模块中还有很多属性可供网络应用程序使用.这里将详细讲解一下socket模块 ...

  8. A River Runs Through It

           Our birth is but a sleep and a forgetting:   The Soul that rises with us, our life's Star,    ...

  9. 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国

    案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. ...

  10. SSH登录警告(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)

    在配置本机与docker容器实现ssh无密码访问时出现以下报错 # federico @ linux in ~ [18:35:52] C:127$ sudo ssh-copy-id -i .ssh/i ...