天天看点

java io系列18之 CharArrayReader(字符数组输入流)

从本章开始,我们开始对java io中的“字符流”进行学习。首先,要学习的是CharArrayReader。学习时,我们先对CharArrayReader有个大致了解,然后深入了解一下它的源码,最后通过示例来掌握它的用法。

CharArrayReader 函数列表

java io系列18之 CharArrayReader(字符数组输入流)
java io系列18之 CharArrayReader(字符数组输入流)

Reader是CharArrayReader的父类,我们先看看Reader的源码,然后再学CharArrayReader的源码。

1. Reader源码分析(基于jdk1.7.40)

java io系列18之 CharArrayReader(字符数组输入流)
java io系列18之 CharArrayReader(字符数组输入流)
java io系列18之 CharArrayReader(字符数组输入流)

2. CharArrayReader 源码分析(基于jdk1.7.40)

java io系列18之 CharArrayReader(字符数组输入流)
java io系列18之 CharArrayReader(字符数组输入流)
java io系列18之 CharArrayReader(字符数组输入流)

说明:

CharArrayReader实际上是通过“字符数组”去保存数据。

(01) 通过 CharArrayReader(char[] buf) 或 CharArrayReader(char[] buf, int offset, int length) ,我们可以根据buf数组来创建CharArrayReader对象。

(02) read()的作用是从CharArrayReader中“读取下一个字符”。

(03) read(char[] buffer, int offset, int len)的作用是从CharArrayReader读取字符数据,并写入到字符数组buffer中。offset是将字符写入到buffer的起始位置,len是写入的字符的长度。

(04) markSupported()是判断CharArrayReader是否支持“标记功能”。它始终返回true。

(05)

mark(int

readlimit)的作用是记录标记位置。记录标记位置之后,某一时刻调用reset()则将“CharArrayReader下一个被读取的位置”重

置到“mark(int

readlimit)所标记的位置”;也就是说,reset()之后再读取CharArrayReader时,是从mark(int

readlimit)所标记的位置开始读取。

关于CharArrayReader中API的详细用法,参考示例代码(CharArrayReaderTest.java): 

java io系列18之 CharArrayReader(字符数组输入流)
java io系列18之 CharArrayReader(字符数组输入流)

运行结果:

0 : a

1 : b

2 : c

3 : d

4 : e

buf=klmno

buf=fghij