java文件操作中的几个流的关系(3)

在(2)中我们讲了文件操作的基本的四个流,这篇文章中我们来了解下文件操作的几个增强流。

  1. 为什么要使用增强流
    前面的几个基本的流,虽然可以读一定数组长度的文件,但是在日常中,我们一般都是一行一行的读写,而且每一行数据的多少也不一定能保证都一样,所以这个时候再使用这几个基本的流已经不能再满足我们的需求了,于是就产生了增强流这个东西。
  2. 了解增强流的基本概念
    增强流是基本流的子类,在他们的基础上增加了部分功能,比如多了常用的readLine() ,用来读取一行的内容,我们再看一下两者构造方法的区别
	BufferedReader(Reader in) //创建使用默认大小的输入缓冲区的缓冲字符输入流。
	BufferedReader(Reader in, int sz) //创建使用指定大小的输入缓冲区的缓冲字符输入流。
 
    FileReader(File file) //在给定从中读取数据的 File 的情况下创建一个新 FileReader。 
    FileReader(FileDescriptor fd)// 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 
    FileReader(String fileName) //  在给定从中读取数据的文件名的情况下创建一个新 FileReader。 

FileReader构造方法中的参数是文件,意味着FileReader和最终的数据源相关联,这样的流成为底层流

BufferedReader的构造方法中的参数是一个流(BufferedReader比FileReader多出了一个readLine方法),意味着BufferedReader增强了FileReader的功能,这样的流称为增强流(或装饰流、包装流、高级流),增强流和底层流相关联。

BufferedReader和BufferedWriter内部自带了缓冲区(字符数组),默认大小是8k,即8192。

  1. 增强流的使用
    BufferedReader
    public class TestBufferedReader {
    public static void main(String[] args) throws Exception {
    	BufferedReader br = new BufferedReader(new FileReader(new File("D:\\a.txt")));
    	char[] buff = new char[10];
    	int length = br.read(buff);
    	while(length != -1) {
    		System.out.println(new String(buff,0,length));
    		length = br.read(buff);
    	}
    	br.close();
    }
    }
    
    

对比以前的FileRead

public class TestReadeer {
	public static void main(String[] args) throws Exception {
		Reader reader = new FileReader("D:\\a.txt");
		char[] buff = new char[10];
		int length = reader.read(buff);
		while(length != -1) {
			System.out.print(new String(buff,0,length));
			length = reader.read(buff);
		}
		reader.close();
	}
}

一眼看上去两者在代码层次上都查不多,但是在运行是所进行的操作可大不相同,假设一个文件大小问N,如果没有使用BufferedReader,那么每次读取10个字符,至少和磁盘上的文件交互N/10次,当使用了BufferedReader时,每次先读8K的字符到缓冲数组中,先保存起来,和文件交互N/8192次。br.read(buff)实际上不在与文件打交道,而是读缓冲数组(内存)中的数据,读内存的速度很快。

结论
以后读取字符文件时都尽量使用BufferedReader
以后读取字节文件时都尽量使用BufferedInputStream
以后写字符文件时都尽量使用 BufferedWriter
以后写字节文件时都尽量使用 BufferedOutputStream

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值