[IO] JavaIO之CharArrayReader 和 CharArrayWriter(十八)

编程语言 编程语言 1573 人阅读 | 0 人回复

功能简介

CharArrayReader 和 CharArrayWriter, 字符数组作为数据源的字符读写

CharArrayReader CharArrayWriter 只需要记住他们的根本, CharArray 是数据源的形式 读 CharArrayReader 需要接受一个字符数组作为参数 就是从CharArray 中读,所以需要一个字符数组 写 CharArrayWriter 就是写入到一个CharArray 中去,所以 它内部维护了一个字符数组 显然, 字符数组都是内存中的数据

他们的逻辑类似ByteArrayInputStream ByteArrayOutputStream

只不过一个是字节,一个是字符而已

看下字段对照,相比就能对于实现过程了解一二

image.png

image.png

CharArrayReader

要始终记着Reader的常规约定方法

方法 说明
read 读取一个字符或者读取字符到数组
markresetmarkSupported 标记点相关
ready 类似available true 则保证不会阻塞,false则不保证一定阻塞
close 关闭流

构造方法

构造方法的本质就是 CharArrayReader的原理 从一个字符数组中读取数据,这个字符数组通过构造方法传入 注意: 字节数组不是复制而来的,引用直接指向

image.png

使用char buf[] 作为数据源

image.png

使用char buf[]中, off偏移量开始, length长度个字符 作为数据源

image.png

read

提供了两个版本的read 读一个字符 或者读取字符 到指定的字符数组中的指定位置

image.png

标记功能

CharArray作为数据源,本身就是内存中的数据 所以只需要标志点,可以随意切换 自然支持标记功能

image.png

close

close方法没有太多实际的事情要做 只是缓冲区置空

image.png

CharArrayWriter

writer的常规约定

方法 说明
write 将指定的的字符 字符序列 String ,写入
append 追加指定的内容
flush 刷新
close 关闭

构造方法

CharArraywriter 内部维护了一个字符数组

image.png

构造方法主要就是对他进行初始化 默认大小是32

image.png

缓冲区会随向流中写入数据而自动增长 在调用write方法过程中 一旦大小超过,将会通过Arrays.copyOf 进行自动增长 增长是创建另外一个数组,原始数据全部拷贝过去

char buf[] 是实际存储数据的内部数组 count即是大小,也是下一个将要写入数据的下标索引

所以想要知道大小,直接返回count 想要重置缓冲区,直接count清零,下次从头开始写入即可

image.png

write

提供了三个版本的write

将指定内容写入输出流缓冲区

方法 说明
public void write(int c) 将一个字符写入内部缓冲区
public void write(char c[], int off, int len) 将指定的len个字符写入内部缓冲区
public void write(String str, int off, int len) 将字符串的某一部分写入内部缓冲区

writeTo

将缓冲区内的内容写入到另外的字符流 过程很简单,直接调用参数out的write方法

image.png

flush 和close

flush 和close在字符输出流中并没有什么好做的

image.png

总结 CharArrayReader 和 CharArrayWriter,字符数组作为数据源的字符读写 逻辑是类似ByteArrayInputStream ByteArrayOutputStream 的

只需要记住CharArrayReader 接受一个CharArray 从这里面读,,read操纵的都是这个字符数组 CharArrayWriter内部有一个CharArray 数据是写入到他们里面的即可,write操纵的是内部的字符数组

common_log.png 转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-154-1-1.html

关注下面的标签,发现更多相似文章

文章被以下专栏收录:

    黄小斜学Java

    疯狂的字节X

  • 目前专注于分享Java领域干货,公众号同步更新。原创以及收集整理,把最好的留下。
    包括但不限于JVM、计算机科学、算法、数据库、分布式、Spring全家桶、微服务、高并发、Docker容器、ELK、大数据等相关知识,一起进步,一起成长。
热门推荐
[若依]微服务springcloud版新建增添加一个
[md]若依框架是一个比较出名的后台管理系统,有多个不同版本。
[CXX1300] CMake '3.18.1' was not
[md][CXX1300] CMake '3.18.1' was not found in SDK, PATH, or
海康摄像头接入 wvp-GB28181-pro平台测试验
[md]### 简介 开箱即用的28181协议视频平台 `https://github.c