之前已经给大家讲了关于字符流和字节流的一些相关知识,并且输入和输出都做了一些简单的讲解和举例,而这篇文章主要是讲解一下关于字符流中缓冲区的相关知识点。
其实在讲解输入流和输出流的时候我们就已经有定义一个缓冲区的变量,而且我们定义的是一个数组,而今天专门讲解的缓冲区其实就是把像单个字符、数组和字符串等封装成了一个对象,而这个对象要用于输入和输出我们就提供了另外两个类来体现,分别是BufferedWriter和BufferedReader。
其实简单的讲就是我们在频繁的读取和写入数据的时候,都可能会频繁的涉及到诸如数据库调用等操作,这样可能会使我们的程序效率降低,那么这个时候如果有一个缓冲区,就能解决掉这样的问题。而且我们在封装成对象后,另外还提供了一些方法来方便操作文本信息,如:newLine和readLine方法。
newLine:这个方法是BufferedWriter类里的方法,它的作用是写入一个行分隔符。(相当于调用System.getProperty类中的line.separator字段,当然有一点,只能是BufferedWriter类中才可以调用newLine这个方法来使用系统字段,其他地方要使用必须自定义静态变量来调用)
readLine:这个方法是BufferedReader类里面的方法,它的作用是读取一个文本行,直到遇到诸如:换行 (‘n’)、回车 (‘r’) 或回车后直接跟着换行。
那么接下来废话不多说,我们首先来编写一个“使用缓冲区写入一个文本文件”。
如下:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferWrtierDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("E:\Text.txt");
//创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相并联。
BufferedWriter bufw = new BufferedWriter(fw);
//使用缓冲区的写入方法将数据先写入到缓冲区中。
/*
bufw.write("xixixix");
bufw.newLine();
bufw.write("hehehe");
*/
for(int x=1;x<=4;x++){
bufw.write("abcd"+x);
bufw.newLine();
bufw.flush();
}
//使用缓冲区的率先呢方法将数据刷新到目的地中。
bufw.flush();
//关闭缓冲区。(其实关闭的就是被缓冲的流对象)
bufw.close();
}
}
接下来编写一个“使用缓冲区读取一个文本文件”
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferReaderDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("E:\Text.txt");
BufferedReader bufr = new BufferedReader(fr);//把对象fr放入缓冲区
//下面的循环方法就是使用BufferedReader缓冲区的方法(更高效)
String line = null;
while((line=bufr.readLine())!=null){
System.out.println(line);
}
bufr.close();
}
//下面这个demo方法是自定义缓冲区的方法。
public static void demo() throws IOException {
FileReader fr = new FileReader("E:\Text.txt");
char[] buf = new char[1024];
int len = 0 ;
while((len=fr.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
fr.close();
}
}
而如果我们要实现“使用缓冲区复制一个文本文件”的功能,那么就需要用到以上两种方式:输入流和输出流。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyTextBufferDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("E:\Text.txt");
BufferedReader bufr = new BufferedReader(fr);
FileWriter fw = new FileWriter("E:\Text_copy.txt");
BufferedWriter bufw = new BufferedWriter(fw);
String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
}
}