工作中用到了字符流,所以去看了下JDK学习,分享一下学习笔记!
源码分析
这里附上我经常查看的源码JDK8的链接,供各位客官参考。
Reader类的前世今生
包名:java.io
类名: Reader
继承类:java.lang.Object
实现的接口:Closeable, AutoCloseable, Readable
直接子类:BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
filed域
用于同步此流上的操作的对象。
protected Object lock
构造函数
类型 | 方法名 | 描述 |
---|---|---|
protected | Reader() | 创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。 |
protected | Reader(Object lock) | 创建一个新的字符流阅读器,其关键部分将在给定对象上同步。 |
构造函数细节
protected Reader()
描述:
创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。
protected Reader(Object lock)
描述:
创建一个新的字符流阅读器,其关键部分将在给定对象上同步。
方法分析
返回类型 | 方法名 | 描述 |
---|---|---|
abstract void | close() | 关闭流并释放与其关联的所有系统资源。 |
void | mark(int readAheadLimit) | 标记流中的当前位置。 |
boolean | markSupported() | 判断此流是否支持mark()操作。 |
int | read() | 读一个字符。 |
int | read(char[] cbuf) | 将字符读入数组。 |
abstract int | read(char[] cbuf, int off, int len) | 将字符读入数组的一部分。 |
int | read(CharBuffer target) | 尝试将字符读入指定的字符缓冲区。 |
boolean | ready() | 判断此流是否可以读取。 |
void | reset() | 重置流。 |
long | skip(long n) | 跳过字符。 |
方法使用细节
public int read(CharBuffer target)
描述:
尝试将字符读入指定的字符缓冲区。 缓冲区按原样用作字符存储库:唯一的更改是put操作的结果。 不执行缓冲器的翻转或倒带。
具体说明:interface Readable
参数:
target - 读取字符的缓冲区
返回:
添加到缓冲区的字符数,如果此字符源位于其末尾,则返回-1
public int read()
描述:
读一个字符。 此方法将阻塞,直到字符可用,发生I / O错误或到达流的末尾。
打算支持高效单字符输入的子类应该重写此方法。
返回:
字符读取,为0到65535(0x00-0xffff)范围内的整数,或者如果已到达流末尾则为-1
public int read(char[] cbuf)
描述:
将字符读入数组。 此方法将阻塞,直到某些输入可用,发生I / O错误或到达流的末尾。
返回:
读取的字符数,如果已到达流的末尾,则返回-1
public abstract int read(char[] cbuf, int off, int len)
描述:
将字符读入数组的一部分。 此方法将阻塞,直到某些输入可用,发生I / O错误或到达流的末尾。
参数:
cbuf - 目标缓冲区
off - 开始存储字符的偏移量
len - 要读取的最大字符数
返回:
读取的字符数,如果已到达流的末尾,则返回-1
public long skip(long n)
描述:
跳过字符。 此方法将阻塞,直到某些字符可用,发生I / O错误或到达流的末尾。
参数:
n - 要跳过的字符数
返回:
实际跳过的字符数
public boolean ready()
描述:
判断此流是否可以读取。
返回:
如果保证下一个read()不阻止输入,则返回true,否则返回false。 请注意,返回false并不能保证下一次读取将被阻止。
public boolean markSupported()
描述:
判断此流是否支持mark()操作。 默认实现始终返回false。 子类应该重写此方法。
public void mark(int readAheadLimit)
描述:
标记流中的当前位置。 对reset()的后续调用将尝试将流重新定位到此点。 并非所有字符输入流都支持mark()操作。
参数:
readAheadLimit - 限制在保留标记的同时可以读取的字符数。 读取这么多字符后,尝试重置流可能会失败。
public void reset()
描述:
重置流。 如果已标记流,则尝试将其重新定位到标记处。 如果尚未标记流,则尝试以适合特定流的某种方式重置它,例如通过将其重新定位到其起始点。 并非所有字符输入流都支持reset()操作,有些支持reset()而不支持mark()。
public abstract void close()
描述:
关闭流并释放与其关联的所有系统资源。 关闭流后,进一步的read(),ready(),mark(),reset()或skip()调用将抛出IOException。 关闭先前关闭的流无效。