转载请注明源出处: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. Ubuntu安装教程(双系统)

    经常要重装还不如写个安装教程省的每次都要查 Ubuntu安装教程: win7下安装Linux实现双系统全攻略:https://jingyan.baidu.com/article/c275f6bacc3 ...

  2. jQueryUI datepicker 报错: TypeError: inst is undefined

    前提:要引用的js等都引用好了 调用日期控件的input: <input id="starttime" name="starttime" class=&q ...

  3. MyEclipse2014中Java类右键Run as没有JUnit Test

    Java初学,想试试连接本地数据库,按照百度经验中的方法,在最后执行测试的卡住了,为啥?因为MyEclipse中右键Run as没有JUnit Test选项! 6.1.测试数据库mysql是在项目中连 ...

  4. 谷类 cereal

  5. Redis.conf配置文件内容详解

    #默认以后台方式运行 daemonize yes #指定redis pid文件 pidfile /data/apps/var/redis2/redis2.pid #指定redis启动占用的端口 por ...

  6. AndroidPn源码分析(二)

    接上篇: (一)客户端与服务器建立连接 上一篇写到ClientSession createClientSession这里,创建一个客户端的session.在SessionManager类中创建了ses ...

  7. 简易Python语句获取本机ip地址

    import os, socket def public_ip(): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.conne ...

  8. 使用hadoop-daemon.sh 启动bootstrapStandby nameNode异常

    使用hadoop-daemon.sh 启动bootstrapStandby nameNode异常 启动bootstrapStandby nameNode时,直接通过ssh 过去执行该命令,一直无法成功 ...

  9. C# 图像自动切换

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  10. 构建NetCore应用框架之实战篇(五):BitAdminCore框架1.0登录功能设计实现及源码

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.设计原则 1.继承前面框架架构思维,设计以可读性作为首要目标. 2 ...