一.带缓存的输入输出流
缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()、mark()和reset()方法都成为可能。
1.BufferedInputStream类和BufferedOutputStream类
(1)BufferedInputStream类可以对任意的InputStream类进行带缓存区的包装以达到性能的优化。
BufferedInputStream类有两个构造函数:
BufferedInputStream(InputStream in);
BufferedInputStream(InputStream in,int size);
2.BufferedReader类与BufferedWriter类
BufferedReader类与BufferedWriter类分别继承Reader类与Writer类。这两个类同样具有内部缓存制,并可以行为单位进行输入/输出。
根据BufferedReader类的特点,总结出如图所示的字符数据读取文件的过程。
BufferedReader类常用的方法如下:
read()方法:读取单个字符;
readLine()方法:读取一个文本行,并将其返回为字符串;若无数据可读,则返则返回null;
write( String s,int off,int len)方法:写入字符串的某一部分;
flush()方法:刷新该流的缓存。
newLine()方法:写入一个行分隔符。
在使用BufferedWrite类的Writer()方法时,数据并没有立刻被写入至输出流中,而是首先进入缓存区中。如果想立刻将缓存区中的数据写入输出流中,一定要调用flush()方法。
带缓存输入输出流代码:
1 package org.hanqi.ex; 2 3 import java.io.*; 4 5 public class TestFile4 { 6 7 public static void main(String[] args) { 8 9 try { 10 File f=new File("d:\test.txt"); 11 12 //带缓存 13 //Writer接口的实现类 14 FileWriter fw= new FileWriter(f,true); 15 16 //缓存写入类,构造时需要传入Writer实例 17 BufferedWriter bw=new BufferedWriter(fw); 18 19 bw.write(" 这是清空前缓存方式写入的字符串"); 20 21 //自动管理缓存: 22 //自动写入:1.缓存满了 2.缓存关闭之前 23 24 bw.flush();//主动清空缓存,写入数据 25 26 bw.write(" 这是清空后缓存方式写入的字符串"); 27 28 bw.close(); 29 fw.close(); 30 31 System.out.println("写入完成"); 32 33 //缓存读 34 35 FileReader fr=new FileReader(f); 36 37 BufferedReader br=new BufferedReader(fr); 38 39 40 //第一次读 41 // String str =br.readLine(); 42 // 43 // 44 // while(str!=null) 45 // { 46 // System.out.println(str); 47 // 48 // str=br.readLine(); 49 // } 50 51 while (true) 52 { 53 String str=br.readLine(); 54 55 if(str==null) 56 { 57 break; 58 } 59 60 System.out.println(str); 61 } 62 63 64 } catch (IOException e) { 65 // TODO 自动生成的 catch 块 66 e.printStackTrace(); 67 } 68 69 70 } 71 72 }
小结: