缓冲区:提高了对数据的读写效率,程序频繁的操作一个文件,性能是比较低的,为了提高性能,就可以一次性读取部分数据放入到内存中,其他需要对这部分数据进行操作的则直接通过内存操作。
在java中对于字符操作有输入缓冲区(BufferedReader),输出缓冲区(BufferedWriter).
BufferedWriter将文本写入字符输出流,通过缓冲区,以提供更高效的写入。
BufferedWriter(Writer out);创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz);创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
例如:向文件buf.txt写入5行内容,每行内容为abcdefg+行数
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferWriterDemo
{
public static void main(String[] args) throws IOException
{
//创建一个可以往文件中写入字符数据的输出流对象
FileWriter fileWriter = new FileWriter("buf.txt");
//创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联
BufferedWriter bufferWriter = new BufferedWriter(fileWriter);
for(int i = 1; i <= 5;i++)
{
bufferWriter.write("abcdef"+ i);//使用缓冲区的写入方法将数据先写入到缓冲区中
bufferWriter.newLine();//写入一个行分隔符
bufferWriter.flush();
}
//使用缓冲区的刷新方法将数据刷到目的地中
//bufferWriter.flush();
//关闭缓冲区,其实关闭的就是被缓冲的流对象
bufferWriter.close();
}
}
主要方法有:
void close(); 关闭流,先会刷新流,实际上调用了Writer类的close方法
void flush(); 刷新该流的缓冲
void newLine(); 写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义
BufferedReader从字符输入流读取文本,通过缓冲区,以提供更高效的读取。
BufferedReader(Reader in);创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz);创建使用指定大小的输入缓冲区的缓冲字符输入流
例如:读取上述buf.txt文件
import java.io.BufferedReader;
import java.io.FileReader;
public class BufferRead
{
public static void main(String[] args) throws Exception
{
FileReader fileReader = new FileReader("buf.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String lineString = null;
//包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
while((lineString = bufferedReader.readLine()) != null)
{
System.out.println(lineString);
}
bufferedReader.close();
}
}
public String readLine();;读一行文字,一行被视为由换行符(’\ n’),回车符(’\ r’)中的任何一个或随后的换行符终止,如果已达到流的末尾,则为null 。即 readLine()使用了读取缓冲区的read方法,将读取到的字符进行缓冲并判断换行标记,将换行标记前的缓存数据编程字符串返回。
也可通过以前的方式读取数据:
char[] buf = new char[1024];
int size = 0;
while( (size = bufferedReader.read(buf)) != -1)
{
System.out.println(new String(buf,0,size));
}