一、缓存流
以介质是硬盘为例子说明,字节流和字符流的缺点:
每次读写的时候,都会访问硬盘,如果读写频率比较高的时候,性能不佳。为了解决问题,采用缓存流。
缓存流在读取的时候,会一次性读较多的数据到缓存中,以后每一次的读取,都是在缓存中访问,直到缓存中的数据读取完毕,再到硬盘中区读取。
缓存流在写入数据的时候,会先把数据写入到缓存区,直到缓存区达到一定的量,才把这些数据,一起写入到硬盘中去,按照这种方式,就不会像字节流,字符流那样每次写一个字节都访问硬盘,减少了I/O操作。
1、使用缓存流读取数据
BufferedReader缓存字符输入流,可以一次读取一行数据
package stream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class TestStream{ public static void main(String[] args){ File f=new File("d/source/LOL.exe"); try(FileReader fr=new FileReader(f);BufferedReader br=new BufferedReader(fr);){ while(true){ String line=br.readLine();//一次读一行。 if(line==null)break; System.out.println(line); } }catch(IOException e){ e.printStackTrace(); } } }
2、使用缓存流写入数据
PrintWriter缓存字符输出流,可以一次写出一行数据
package stream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class TestStream{ public static void main(String[] args){ File f=new File("d/source/LOL.exe"); try(FileWriter fw=new FileWriter(f);PrintWriter pw=new PrintWriter(fw);){ { pw.println("hello world"); pw.println("hello kitty"); } }catch(IOException e){ e.printStackTrace(); } } }
3、使用flush
有时候,需要立即把数据写入到硬盘,而不是等缓存满了才写进去,这时候就要用flush