Java 输入输出相关概念介绍(File、IO 流)(十二)(BufferedReader)

209 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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 的其他子类。