一、字符流的缓冲区——BufferedReader和BufferedWriter
1、缓冲区的出现:提高了流的读写效率,所以在缓冲区创建前,要先创建流对象。即先将流对象初始化到构造函数中。
2、缓冲技术原理:此对象中封装了数组,将数据存入,再一次性取出。
3、写入流缓冲区BufferedWriter的步骤:
1)创建一个字符写入流对象。
如:FileWriter fw=newFileWriter("buf.txt");
2)为了提高字符写入流效率。加入缓冲技术。只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
如: BufferedWriter bufw =new BufferedWriter(fw);
3)调用write方法写入数据到指定文件
如:bufw.write("adfg");
记住,只要用到缓冲区,就要记得刷新。(关闭流同样会刷新,但为了排除意外事故,保证数据存在,建议写入一次就刷新一次)
如:bufw.flush();
4)其实关闭缓冲区,就是在关闭缓冲区中的流对象。
如: bufw.close();
小知识:BufferedWriter缓冲区中提供了一个跨平台的换行符:newLine();可以在不同操作系统上调用,用作数据换行。
如:bufw.newLine();
4、读取流缓冲区BufferedReader
该缓冲区提供了一个一次读一行的方法readLine,方便于堆文本数据的获取,当返回null时表示读到文件末尾。readLine方法返回的时候,只返回回车符之前的数据内容。并不返回回车符。
readLine方法原理:
无论是读一行。或者读取多个字符。其实最终都是在在硬盘上一个一个读取。所以最终使用的还是read方法一次读一个的方法。
步骤:
1)创建一个读取流对象和文件相关联
如: FileReader fr=newFileReader("buf.txt");
2)为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲区对象的构造函数。
如: BufferedReader bufr=new BufferedReader(fr);
3)调用该缓冲区提供的readLine方法一行一行读取,如果到达文件末尾,则返回null
如: String s=bufr.readLine();
4)关闭流资源
如: bufr.close();、
示例:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* 运用缓冲区来读写东西是为了提高流操作效率。
* 所以在创建缓冲区之前,必须有流对象。
* 关闭的时候,只需要关闭缓冲区就可以关闭流。
* 该缓冲区中提供了一个跨平台的换行符。 newLine();
* @author Administrator
*
*/
public class BuffereWriterTest
{
public static void main(String[] args) throws IOException
{
//创建一个字符写入流对象
FileWriter fw = new FileWriter("C:\\buf.txt");
//为了提高字符写入流效率,加入了缓冲区技术。
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < 5; i++)
{
bw.write("dabaddfdfdfd" + i);
bw.newLine();
bw.flush();
}
//记住,只要用到缓冲区,就要记得刷新。
//其实关闭缓冲区,就关闭了缓冲区中的对象,因此不需要再次关闭流对象
bw.close();
}
}