1.字符流的缓冲区
(1) 缓冲区的出现是为了提高数据的读写效率。
(2)对应类:BufferedWriter 和 BufferedReader
(3)缓冲区要结合流才可以使用
/*
*
* 字符流读取缓冲区:
* 该缓冲区提供了一个一次读一行的方法readline,返回null时,表明读到末尾。方便与对文本数据的获取。
*/
package com.heima;
import java.io.*;
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
//创建一个读取流对象和文件相关联
FileReader fr=new FileReader("buf.txt");
//为了提高效率,加入缓冲区技术。将字符读取流对象作为参数传递给缓对象的构造函数。
BufferedReader br=new BufferedReader(fr);
String line=null;
while((line=br.readLine())!=null)
{
System.out.println(line);
}
br.close();
}
}
/* *字符流写入缓冲区 */ package com.heima; import java.io.*; public class BufferWriterDemo { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub //创建一个字符写入流对象。 FileWriter fw=new FileWriter("buf.txt"); //为了提高字符写入流效率,加入了缓冲技术。 //只要将需要提高效率的流对象作为参数传递给缓冲区的构造函数即可。 BufferedWriter bw=new BufferedWriter(fw); for(int x=1;x<5;x++) { bw.write("abcd"); bw.newLine(); bw.flush(); } //记住,只要用到缓冲区,就要记得刷新。 //bw.flush(); //其实关闭缓冲区,就是在关闭缓冲区中的流对象。 bw.close(); } }
/* * 通过缓冲区复制一个.java文件 */package com.heima;import java.io.*;
public class CopyTextByBuf {
public static void main(String[] args) {// TODO Auto-generated method stub BufferedReader bufr=null; BufferedWriter bufw=null; try{ bufr=new BufferedReader(new FileReader("BufferedWriterDemo.java")); bufw=new BufferedWriter(new FileWriter("bufWriter_copy.txt")); String line =null; while((line=bufr.readLine())!=null)//readline方法返回是回车符之前的数据内容。不会返回回车符。 { bufw.write(line); bufw.newLine(); bufw.flush(); } }catch(IOException e){ throw new RuntimeException("读写失败"); }finally{ try { if(bufr!=null) bufr.close();} catch (IOException e) {// TODO Auto-generated catch blockthrow new RuntimeException("读取关闭失败");}try { if(bufw!=null) bufw.close();} catch (IOException e) {// TODO Auto-generated catch blockthrow new RuntimeException("写入关闭失败");} } }}
注:readLine方法的原理:无论是读一行,读取多少个字符。其实最终都是在硬盘上一个一个读取。所以最终使用的还是read方法一次读一个的方法。