浅谈BufferedReader中的read方法和readLine方法

前言:本人比较菜啦,如果有错误,还请大佬指正。

1. read方法

查看API文档我们可以发现BufferedReader类中的read()方法**(无参数的)**并不是继承于Read类中的read方法。

BufferedReader 批量处理 bufferedreader read方法_换行符


这是怎么一回事呢?

首先我们回到Read类中的read方法简介去看

BufferedReader 批量处理 bufferedreader read方法_字符串_02


这里说明了高效单字符输入的子类应该覆盖此方法,答案已经显而易见了,BufferedRead中的read()方法覆盖了原Read中的read()方法并提高了效率。

那么这个BufferedReader中的read()方法与Read中的read方法有什么区别呢?

其实,BufferedReader作为Read的一种缓冲区,其实就是为了提高效率的,原理其实很简单:
  在Read类中的read()方法是将硬盘上的字符一个个读取出来使用,
  而BufferedReader中的read()方法是将缓冲区中的字符一个个读出来使用,缓冲区是主内存中特地预留出的内存,
  从缓冲区里面取数据的效率一般是比直接在硬盘上取数据要快的...(缓冲区我就不介绍了,直接上例子)
  **就好比**:
  厨房里面有一大堆包子,之前每次你想吃包子总是需要跑到厨房去拿,而现在有了一个大盘子(缓冲区),
  你就可以现在盘子里装好包子,然后想吃的时候去盘子里拿一个就好了。
  简单来说就是一句话:
  覆盖后的read()方法效率更高...

2. readLine方法

BufferedReader中比较有意思的方法就是这个readLine方法了,这个方法是读取一行字符的,其实原理也很简单。

  • readLine方法其实是使用了缓冲区的read方法(就是上面讲到的read方法),将读到的字符进行缓冲(缓冲在一个临时容器里面),读到换行符(\n或者\r,这个主要是考量在不同操作系统上的换行符不一样)就停止(ps:不会把换行符读进去的哈),然后将结果以字符串的形式返回。