通过缓冲区读写,减少系统IO次数,从而提高读写的效率。
如果要使用缓冲区进行数据操作,java.io包提供了以下两种缓冲区流:
(1)字符缓冲流:
BufferedReader类是字符输入流Reader类的子类:
构造方法:public BufferedReader(Reader in);//创建一个字符缓冲输入流对象
常用方法:public String readLine() throws IOException; //读取读取一行数据,默认以“\n”为分隔符;
BufferedWriter类是字符输出流Writer类的子类:
构造方法:public BufferedWriter(Writer out); //创建一个字符缓冲输出流对象
File file1 = new File("c.txt");
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
File file2 = new File("d.txt");
FileWriter fw = new FileWriter(file2);
BufferedWriter bw = new BufferedWriter(fw);
(2)字节缓冲区:
BufferedInputStream是字节输入流InputStream的子类;
构造方法:public BufferedInputStream(InputStream in); //创建一个字节缓冲输入流对象
BufferedOutputStream是字节输出流OutputStream的子类;
构造方法:public BufferedOutputStream(OutputStream out);//创建一个字节缓冲输出流对象
File file1 = new File("c.txt");
FileInputStream fis = new FileInputStream(file1);
BufferedInputStream bis = new BufferedInputStream(fis);
File file2 = new File("d.txt");
FileOutputStream fos = new FileOutputStream(file2);
BufferedOutputStream bos = new BufferedOutputStream(fos);
注意:字符缓冲输入流BufferedReader(Reader in)构造方法里要接收的是字符流Reader类对象,而在使用System.in时,它是InputStream字节流对象,因此需要使用字节转换流来转换。也就是说当参数需要的事字符流时,而参数类型又是字节流类型,可以借助字节流转字符流类。
使用举例:
BufferedReader buff= new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入您的数据:");
String str=buff.readLine();
System.out.print("您输入的数据:"+str);
有了BufferedReader的readLine()读取一行文字方法,获取一整个文本内容的效率就可以比以前一个字符一个字符读取更快了:
BufferedReader br = new BufferedReader(new FileReader("c.txt"));
String str = null;
while ((str = br.readLine())!=null){
System.out.println(str);
}
br.close();