缓存是I/o的一种性能优化,带缓存为I/o流增加了内存缓存区,有了缓存区,使得在六上执行skip(),mark(),reset()方法成为可能。
一.BufferedinputStream与BufferedOutputStream类:
1. BufferedinputStream有两种构造方法:
(1)BufferedinputStream(inputStream in)
(2)BufferedinputStream(inputStream in,int size)
第一种形式的构造方法创建了一个带有32个字节的缓存流,第二种形式的构造方法按指定的大小来创建缓存区。一个最优的缓存区的大小,取决于它所在的操作系统,可用的内存空间以及机器配置。从构造方法可以看出,BufferedinputStream对象位于InputStream类对象之前
2.BufferedOutputStream类有两种构造方法
(1)BufferedOutputStream(OutputStream in)
(2)BufferedOutputStream(OutputStream in,int size)
第一种构造方法创建了一个有32个字节的缓存区域,第二种构造方法以指定的大小来创建缓存区
注意:flush()方法是用于即使在缓存区域没有存满的情况下,也将缓存区的内容强制写入到外设,习惯上称这个过程为刷新,flush()方法只对使用缓存区的OutputStream类的子类有效,当调用close()方法时,系统在关闭之前,也将缓存区中的信息刷新到磁盘文件中。
二.BufferedReader与BufferedWriter类
BufferedReader类常用的方法如下。
(1)read()方法:读取单个字符。
(2)readLine()方法:读取一个文本行,并将其返回为字符串。若无数据可读,则返回null。BufferedWriter类中的方法都返回void,常用的方法如下:
(1) write(String s,int off, int len)方法:写入字符串的某一部分。
(2)flush()方法:刷新该流得缓存。
(3)newline()方法:写入一个行分隔符。
例:
1 package file; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileReader; 7 import java.io.FileWriter; 8 9 public class Student { 10 public static void main(String []args){ 11 String contet[] = {"夜夜思君情断肠,缘何人不双,夜夜痴迷空自伤,月随人彷徨"}; 12 //创建文件对象 13 File file = new File("D:/Sourcecode/Java/file/word2.txt"); 14 try{ 15 //创建FileWriter类对象 16 FileWriter fw = new FileWriter(file); 17 //创建bufferWriter类对象 18 BufferedWriter buffw = new BufferedWriter(fw); 19 for(int k = 0;k < contet.length;k++){ 20 buffw.write(contet[k]);//将字符串数组中的元素写入到磁盘文件中 21 buffw.newLine();//将数组中的单个元素以单行的形式写入文件 22 } 23 buffw.close(); //将BufferReader流关闭 24 fw.close(); //将FileWriter流关闭 25 }catch(Exception e){ 26 e.printStackTrace(); 27 } 28 try{ 29 //创建FileReader类对象 30 FileReader fr = new FileReader(file); 31 //创建BufferReader类对象 32 BufferedReader bufr = new BufferedReader(fr); 33 String s = null;//创建字符串对象 34 int i = 0; 35 //如果文件文本行数不为空,则进入循环 36 while((s = bufr.readLine()) != null){ 37 i++; 38 System.out.println("第"+i+"行"+s); 39 } 40 bufr.close(); 41 fr.close(); 42 43 }catch(Exception e){ 44 e.printStackTrace(); 45 } 46 } 47 }
运行结果:
第1行夜夜思君情断肠,缘何人不双,
第2行夜夜痴迷空自伤,月随人彷徨