IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
在之前的学习笔记(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter与FileReader的Demo使用的中转数据buf实际就是缓冲区,是由我们自己创建的。
缓冲区可以提高效率,Java对缓冲区进行了封装,封装成了对象,即读与写操作都进行了缓冲:
BufferedWriter
BufferedReader
缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强
为什么会提高效率(同数据库连接池,避免每次的创建连接和断开连接,直接创建一个容器,使用完放回即可):
常规的读一次写一次的方式,磁头需要进行不断的切换
缓冲的方式,每次读取一块便在内存中存储一块,一旦装满了或者没有数据可以继续读取了,就开始写操作
代码:设计优化(重构);性能优化(最常见的手段之一就是缓冲区)
public class BufferdeWriter extends Writer:
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、雅思考试时间数组和字符串的高效写入
本质:用数组在缓冲存流中的数据,因此缓冲区在被创建时,必须要有被缓存的对象
BufferedWriter(Writer
out):创建一个使用默认大小输出缓冲区的缓冲字符输出流
BufferedWriter(Writer out,int
sz):创建一个使用给定大小输出缓冲区的缓冲字符输出流
close():关闭此流,但要先刷新它
flush():刷新该流的缓冲
newLine():写入一个分隔符,实际就是将System.getProperty(“line.separator”)进行了封装
write(char[] cbuf,int off,int len):写入字符数组的某一部分
write(char c):写入单个字符
write(String s,int off,int
len):写入字符串的某一部分
public BufferedReader extends Reader:
从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行(文本的行数通过回车符来进行判定)的高效读取
注意:缓冲区对象(例如BufferedWriter)操作的都是缓冲区中的内容,email的格式内容从外设到内存是由底层流对象完成的(例如Writer),具体将在如下介绍
read():读取单个字符
read(char[] cbuf,int off,int
len):将字符读入数组的某一部分
readLine():读取一个文本行,通过下列字符之一即可认为某行已终止,换行(‘\n’),回车(‘\r’)或回车后直接跟着换行
返回:包含该行内容的字符串,不包含任何终止符,如果已经到达流末尾,则返回null
bufr.read(buf)是建立缓冲区时调用的方法,因此虽然BufferedReader的read()方法是读取单个字符,但是也是从缓冲区读取,已经是高效方法了。
readLine()方法,在读到一个数据之后不进行操作,而是继续进行缓冲并判断结束标记,详细可以参加图示注释。
注:注释部分代码是逐个读取字符