以下讲解的类都继承于InputStream、OutputStream、Reader、Writer类,下面链接是这些类的常用方法:


缓冲I/O的一种性能优化,缓冲流为I/O增加了内存缓冲区,有了缓冲区,使得在I/O流上执行skip()、mark()、reset()方法成为可能

1.BufferedInputStream类与BufferedOutputStream类

BufferedInputStream类可以对所有InputStream的子类进行带缓冲区的包装,以达到性能的优化,BufferedInputStream类有两个构造方法,如下:

  • BufferedInputStream(InputStream in):创建一个带有32个字节的缓冲输入流;
  • BufferedInputStream(InputStream in,int size):按指定的大小来创建缓冲输入流;

BufferedOutputStream类中的flush()方法被用来把缓冲区中的字节写入到文件中,并清空缓冲,BufferedOutputStream类也有两个构造方法,和BufferedInputStream类类似,如下:

  • BufferedOutputStream(OutputStream in):创建一个带有32个字节的缓冲输入流;
  • BufferedOutputStream(OutputStream in,int size):按指定的大小来创建缓冲输入流;

注意:即使在缓冲区没有满的情况下,使用flush()方法也会将缓冲区的字节强制写入到文件中。

BufferedInputStream类要比FileInputStream类快上很多,下面以两种类举例说明,使用FileInputStream类来读取文件时所用到的时间,代码如下:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		File file = new File("C:\\Users\\Administrator\\Desktop\\jdk api 1.8_google.CHM");
        //系统开始时间(毫秒)
		long start = System.currentTimeMillis();
		try {
			FileInputStream fi = new FileInputStream(file);
			byte chr[] = new byte[1024];
            //循环读取文件内容
			while(fi.read(chr) != -1) {
				
			}
			fi.close();
            //系统结束时间(毫秒)
		    long end = System.currentTimeMillis();
		    System.out.println("运行毫秒数:" + (end - start));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}	
}

返回结果:

java swing 清除输入框_java swing 清除输入框

上述代码中,用到的文件是javaAPI文档,文件太小的话,体验不出来效果,下面在看用BufferedInputStream类查看文件的速度,代码如下:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		File file = new File("C:\\Users\\Administrator\\Desktop\\jdk api 1.8_google.CHM");
        //系统开始时间(毫秒)
		long start = System.currentTimeMillis();
		try {
			FileInputStream fi = new FileInputStream(file);
			BufferedInputStream bi = new BufferedInputStream(fi);
			byte chr[] = new byte[1024];
            //循环读取文件内容
			while(bi.read(chr) != -1) {
				
			}
			bi.close();
			fi.close();
            //系统结束时间(毫秒)
		    long end = System.currentTimeMillis();
		    System.out.println("运行毫秒数:" + (end - start));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}	
}

返回结果:

java swing 清除输入框_类对象_02

上面实例可以看出,BufferedInputStream类要比FileInputStream类块很多。

2.BufferedReader类与BufferedWriter类

BufferedReader类与BufferedWriter类分别继承Reader类与Writer类,这两个类同样具有内部缓冲机制,并以行为单位进行输入/输出。

BufferedReader类的常用方法及说明如下表:

方法

返回值

说明

read()

int

读取单个字符

readLine()

String

读取一个文本行,并将其返回为字符串,若无数据可读,则返回null

BufferedWriter类的常用方法及说明如下表:

下面以行为单位进行输入/输出为例,代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedTest {
	public static void main(String args[]) {
		// 定义字符串数组
		String content[] = { "你不喜欢我,", "我一点都不介意。", "因为我活下来,", "不是为了取悦你!" };
		File file = new File("word.txt"); // 创建文件对象
		try {
			FileWriter fw = new FileWriter(file); // 创建FileWriter类对象
			// 创建BufferedWriter类对象
			BufferedWriter bufw = new BufferedWriter(fw);
			for (int k = 0; k < content.length; k++) { // 循环遍历数组
				bufw.write(content[k]); // 将字符串数组中元素写入到磁盘文件中
				bufw.newLine(); // 将数组中的单个元素以单行的形式写入文件
			}
			bufw.close(); // 将BufferedWriter流关闭
			fw.close(); // 将FileWriter流关闭
		} catch (IOException e) { // 处理异常
			e.printStackTrace();
		}
		try {
			FileReader fr = new FileReader(file); // 创建FileReader类对象
			// 创建BufferedReader类对象
			BufferedReader bufr = new BufferedReader(fr);
			String s = null; // 创建字符串对象
			int i = 0; // 声明int型变量
			// 如果文件的文本行数不为null,则进入循环
			while ((s = bufr.readLine()) != null) {
				i++; // 将变量做自增运算
				System.out.println("第" + i + "行:" + s); // 输出文件数据
			}
			bufr.close(); // 将BufferedReader 流关闭
			fr.close(); // 将FileReader流关闭
		} catch (IOException e) { // 处理异常
			e.printStackTrace();
		}
	}
}

返回结果:

java swing 清除输入框_类对象_03