这篇博客主要是复习一下Java中的IO缓冲流。
1.缓冲流概述
首先要明确一个概念:
对文件或其它目标频繁的读写操作,效率差,性能低
使用缓冲流的好处是,能更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来,其实就是在其它流的基础上加上的缓冲功能
2.BufferedInputStream
public class BufferedInputStream
extends FilterInputSteam
BufferedInputStream为另一个输入流添加,会创建一个内部缓冲区数组,用于缓冲数据
/**
* 使用字节缓冲流进行读取操作
*/
public static void input()
{
try {
InputStream inputStream = new FileInputStream(
new File("H:"+File.separator+"第一种输出方式.txt"));
//根据字节输入流构造一个字节缓冲流,默认的缓冲大小8K左右
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
//使用转换流
Reader reader = new InputStreamReader(bufferedInputStream);
char [] cs =new char[512];
int len=-1;
StringBuilder stringBuilder= new StringBuilder();
while((len=reader.read(cs))!=-1)
{
stringBuilder.append(new String(cs,0,len));
}
System.out.println(stringBuilder);
//关闭流
reader.close();
bufferedInputStream.close();
inputStream.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException ex)
{
ex.printStackTrace();
}
}
3.BufferedOutputStream
public class BufferedOutputStream
extends FilterOutputSteam
/**
* 使用字节缓冲流进行输出操作
*/
public static void write()
{
try{
OutputStream outputStream= new FileOutputStream(
new File("H:"+File.separator+"缓冲流输出.txt")
);
BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(outputStream);
String info="山不在高,有仙则名";
bufferedOutputStream.write(info.getBytes());
//缓冲区的内容只有经过刷新或者关闭流文件才能真正
//写到文件中去
bufferedOutputStream.flush();
bufferedOutputStream.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException ex)
{
ex.printStackTrace();
}
}
在使用字节缓冲流进行输出操作时,最后别忘加调用flush()方法进行缓冲区的强制刷新或者是对流进行关闭,若缓冲区未满的话是不会自动写入到文件中去的,所以必须要强制刷新一下才是可以的
4.BufferedReader
public class BufferedReader
extends Reader
从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可以使用默认的大小。大多数情况下,默认值就足够大了
/**
*根据字符输入流构造一个字符缓冲流
*/
public static void reader()
{
try {
Reader reader =new FileReader(
new File("H:"+File.separator+"字符缓冲流.txt")
);
BufferedReader bufferedReader= new BufferedReader(reader);
char [] cs = new char[2];
int len=-1;
StringBuilder stringBuilder = new StringBuilder();
while ((len=bufferedReader.read(cs))!=-1)
{
stringBuilder.append(new String(cs,0,len));
}
System.out.println(stringBuilder);
//关闭流,这里没有flush方法
bufferedReader.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException ex)
{
ex.printStackTrace();
}
}
5.BufferedWriter
public class BufferedWriter
extends Writer
/**
*使用缓冲流实现写入操作
*/
public static void write()
{
try {
Writer writer = new FileWriter(
new File("H:"+ File.separator+"字符缓冲流.txt")
);
//根据字符流构造一个字符缓冲流
BufferedWriter bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write("爸爸去哪了");
//输出的时候要进行刷新
bufferedWriter.flush();
bufferedWriter.close();
writer.close();
}catch (FileNotFoundException ex)
{
ex.printStackTrace();
}catch (IOException ex)
{
ex.printStackTrace();
}
}