一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
上一篇文章Java 输入输出相关概念介绍(File、IO 流)(十一) 介绍的是Reader 抽象类的一个子类FileReader 的概念及使用方法。本篇文章我们继续介绍Reader 的另外一个子类:BufferedReader。
BufferedReader 的概念
因为我们之前对BufferedInputStream 进行了基本的学习,所以对BufferedReader 的理解应该不难,它的含义就是:缓冲字符输入流,它也是Reader 的子类,它的作用是其他字符输入流添加一些缓冲功能。
相关方法
- 构造函数
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)
上面两个构造函数发现只有一个参数sz 的不同。如果不传这个参数,就会创建一个使用默认大小(默认为8192)输入缓冲区的缓冲字符输入流;如果输入了,那么久会创建一个确定大小输入缓冲区的缓冲字符输入流,但是一般情况我们直接使用默认大小就好了。
- 常用方法
这里列举一些BufferedReader 的常用方法。
void close()
void mark(int markLimit)
boolean markSupported()
int read()
int read(char[] buffer, int offset, int length)
String readLine()
boolean ready()
void reset()
long skip(long charCount)
对于BufferedReader 的常用方法和之前Reader 中叙述的差不多,比如说close/mark 这些。下文中会在使用举例中详细介绍read 方法。
如何使用
从标准输入(System.in)上建立输入流
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
我们在日常开发中知道,System.in 被称作“标准输入”,一般来说就是键盘的输入。
然后使用InputStreamReader 进行包装,建立输入流。这样就可以从标准输入读取数据到缓冲区中了。
具体使用的时候,当比如说在键盘中输入一行字符串时,按下回车,这行数据就会被读到缓冲区中。
从Java的 InputStream中建立输入流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
除了上面那种办法之外,我们还可以在Java 的InputStream 中建立输入流,JavaInputStream 和System.in 的最大的区别就是,InputStream 是可以关闭的。
使用举例
public static void main(String args[]) throws IOException {
// 把字节流变成字符流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String result = "";
while ((result = bufferedReader.readLine()) != null) {
System.out.println(result);
// 其他处理逻辑
if (result.equals("stop")) {
break;
}
}
}
在得到BufferedReader 实例之后,通常调用readLine 方法来读取数据,每次读取一行。readLine 方法以回车换行来标记一行数据的结束。
我们在读取的时候是用while 循环包住的,里面有判断,如果读到了"stop",那么就会退出循环。
总结
本文讲的是BufferedReader 的概念和使用方法,是Reader 的第二个常用的实现类。我们在日常开发中也会经常使用到。后续文章会继续讲解Reader 的其他子类。