JavaApi笔记(五)——IO流篇
一、字符流Reader类关系图
二、Reader类(抽象类)
唯一字段:
当子类需要同步时,应该考虑使用reader抽象类提供的lock对象,而不是在子类中使用子类lock对象或synchronized方法
核心方法表:
序号 | 方法声明 | 功能描述 |
---|---|---|
1 | protected Reader() | 创建一个新的字符流阅读器,其关键部分将在阅读器本身上同步。 |
2 | protected Reader(Object lock) | 创建一个新的字符流阅读器,其关键部分将在给定对象上同步。 |
3 | public int read() throws IOException | 读一个字符。该方法将阻塞,直到字符可用,发生I / O错误或达到流的结尾。 |
4 | public int read(char[] cbuf) throws IOException | 将字符读入数组。阻塞情况同上一条。 |
5 | public long skip(long n) throws IOException | 跳过指定数量字符。阻塞情况同第三条。 |
6 | public boolean ready()throws IOException | 告诉这个流是否准备好被读取。如果接下来的read()可以执行,则返回true,否则返回false。 |
三、 BufferedReader类(Reader类的直接子类)
描述:BufferedReader类可用于缓存数据,比如
BufferedReader in = new BufferedReader(new FileReader(“XXX.txt”));
缓存暂未read()或readLine()的数据可以提高读取效率,因为若无缓存则每次read()或readLine()都会从文件中读取字节转换成字符然后返回,这样效率会降低。
核心方法表:
序号 | 方法声明 | 功能描述 |
---|---|---|
1 | BufferedReader(Reader in) BufferedReader(Reader in, int sz) | 创建使用默认大小的输入缓冲区的缓冲字符输入流。 创建使用指定大小的输入缓冲区的缓冲字符输入流。 |
2 | String readLine() throws IOException | 读一个字符 |
3 | public int read(char[] cbuf,int off,int len) throws IOException | 将字符读入数组的一部分 尝试通过重复调用基础流的read方法来读取尽可能多的字符 |
4 | public String readLine() throws IOException | 读一行文字。遇到换行符(’\ n’)或回车符(’\ r’)终止。 |
5 | public boolean ready() throws IOException | 告诉这个流是否准备好被读取。 如果缓冲区不为空,或者底层字符流准备就绪,则缓冲字符流就绪。 |
6 | Stream< String > lines() | 返回一个Stream ,其元素是从这个BufferedReader读取的行。 |
7 | public void close() throws IOException | 关闭流并释放与之相关联的任何系统资源 |
四、InputStreamReader类及其子类
- InputStreamReader类
InputStreamReader类核心方法
序号 | 方法声明 | 功能描述 |
---|---|---|
1 | InputStreamReader(InputStream in) InputStreamReader(InputStream in, String charsetName) | 创建一个使用默认字符集的InputStreamReader。 创建一个使用给定字符集名称的InputStreamReader。 |
2 | String getEncoding() | 返回此流使用的字符编码的名称。 |
- FileReader类(FileInputStreamReader类直接子类)
常用构造方法如下:
五、 FilterReader类(抽象类)及其子类
-
FilterReader类
FilterReader类未对Reader类进行方法扩展,但其子类PushbackReader类扩展了。 -
PushbackReader类
PushbackReader类核心方法表:
序号|方法声明|功能描述
-|-|-
1|PushbackReader(Reader in,int size)
PushbackReader(Reader in)|使用给定大小的推回缓冲区创建一个新的推回阅读器。
用一个字符的后置缓冲区创建一个新的推回阅读器。
2|void unread(int c)
throws IOException|将单个字符复制到推回缓冲区的前端。
c - 表示要推回的字符的int值
3|void unread(char[] cbuf,int off,int len)
throws IOException|通过将一部分字符复制到回推缓冲区的前端以推回。
cbuf - 字符数组
off - 第一个字符的推移偏移
len - 要推回的字符数
4|其他方法|未衍生新方法
六、CharArrayReader类(Reader类的直接子类)
核心方法表:
序号 | 方法声明 | 功能描述 |
---|---|---|
1 | CharArrayReader(char[] buf) CharArrayReader(char[] buf, int offset, int length) | 从指定的字符数组中创建CharArrayReader。 从指定的字符数组根据指定位置创建CharArrayReader。 |
2 | 其他方法 | 未衍生新方法 |
七、 PipedReader类(Reader类直接子类)
关键方法:
若当前PipedReader对象已存在管道写入器(PipedWriter),则该方法会抛出异常。
- StringReader类(Reader类直接子类)
核心方法表:
序号 | 方法描述 | 功能描述 |
---|---|---|
1 | StringReader(String s) | 创建一个新的字符串阅读器。 |
2 | 其他方法 | 未扩展Reader类方法。 |