一.带缓存的输入输出流
缓存可以说是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()方法。
带缓存输入输出流代码:
package com.hanqi; import java.io.*; public class TestFile4 { public static void main(String[] args) { try { File f=new File("d:\test.txt"); //带缓存 //Writer接口的实现类 FileWriter fw=new FileWriter(f,true); //缓存写入类,构造时需要传入Writer实例 BufferedWriter bw=new BufferedWriter(fw); bw.write(" 这是缓存方式写入的字符串"); //自动管理缓存 //自动写入:1.缓存满了 2.缓存关闭之前 bw.flush();//主动清空缓存,写入数据 bw.write(" 这是清空后缓存方式写入的字符串"); bw.close(); fw.close(); System.out.println("写入完成"); //缓存读 FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr); //第一次读 // String str=br.readLine(); // // System.out.println(str); // // while(str!=null) // { // System.out.println(str); // // str=br.readLine(); // } while(true) { String str=br.readLine(); if(str==null) { break; } System.out.println(str); } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }