打开API,找到java.io包,发现如BufferedReader类,将父类Reader中的某些方法进行了复写,如close、read等等。
在Reader类中,点开read方法,发现:用于支持高效的单字符输入的子类应重写此方法。
Reader是从源里面读取数据,而BufferedReader是从缓冲区里面读取数据。
(BufferedReader操作的是自己家的数据,是它自己家的数组内数据,往外读,当然不能用父类Reader中的方法,必须复写,生成
一个属于自己特有的方法,所以覆盖了read方法)
形象的比喻:吃馒头
(1)Reader:每吃一个,去厨房拿一次
(2)BufferedReader:直接搞个篮子,然后一次性去厨房拿完,之后只需要从篮子里面取出即可,这里就是自己的取出方式。
发现对于取出方式来说,(2)比(1)更加高效。
有了缓冲区,那么直接操作内存即可,无需再操作硬盘。
=============================================================================================================
下面讲解BufferedReader中的readLine方法原理:
首先查找API,发现readLine方法说明:
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
其实原理很简单,就是自己建立一个临时容器A,然后从头开始读取,只要读到换行符,立即终止读取,那么此时A内存储的是文本文件
一行的数据。(read方法是将读到的数据一直往缓冲区里面塞,就算读到换行,也存入缓冲区中。)然后将该行数据以String类型输出。
其实readLine方法就是基于read方法,多建立了一个临时容器,判断一次结束标记,即换行符。
图解见桌面