javaIO流—缓冲流

缓冲字节流    BufferedInputStream 和 BufferedOutputStream

缓冲字符流:BufferedReader  、 BufferedWriter (缓冲流都是处理流)

缓冲流原理:

会在内存中开辟一个空间作为缓冲区,在读写之前,先将磁盘数据导入到缓冲区,在读写时直接从缓冲区进行读写,减少了直接从磁盘读写次数,从而提高读写效率。

缓冲流使用:

1) 读文件和写文件都使用了缓冲区,减少了读写次数,从而提高了效率
2) 当创建这两个缓冲流的对象时时,会创建了内部缓冲数组, 缺省使用 32 字节大小的缓冲区.
3) 当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区
4) 当写入数据时,首先写入缓冲区,当缓冲区满时,其中的数据写入所连接的输出流。使用方法 flush()可以手动强制将缓冲区的内容全部写入输出流
5) 关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,关闭高层流其实关闭的底层节点流
6) Flush 的使用:手动将 buffer 中内容写入文件

代码示例:为了方便观看理解,代码的异常全部抛出了

/**
 * 缓冲字节流BufferedInputStream、BufferedOutputStream 复制文档
 */
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestBuffered_Stream {
	public static void main(String[] args) throws IOException {
		//数据源
		FileInputStream fis = new FileInputStream("E:\\a.txt");
		//目的地
		FileOutputStream fos = new FileOutputStream("E:\\test.txt");
		/*
		 * 使用缓冲字节流
		 * */
		BufferedInputStream bis = new BufferedInputStream(fis);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		long time1=System.currentTimeMillis();
		//写入
		byte[] by = new byte[1024]; //中转站
		int len=0;
		while((len=bis.read(by))!=-1) {
			bos.write(by, 0, len);
		}
		
		long time2=System.currentTimeMillis();
		System.out.println("复制文件花费了"+(time2-time1)+"毫秒");
		
		bos.close();
		bis.close();	
	}
}
/**
 * 缓冲字符流BufferedReader、BufferedWriter 复制文档
 */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestBufferedReader_Writer {
	public static void main(String[] args) throws IOException {
		//数据源
		BufferedReader	br = new BufferedReader(new FileReader("E:\\a.txt"));
		//目的地
		BufferedWriter	bw = new BufferedWriter(new FileWriter("E:\\test.txt"));
			//读写
			String str = null;  //用于存储 读到的字符串
			while((str=br.readLine())!=null) { //readLine()表示读取一个文本行的数据
				bw.write(str);
				bw.newLine();//表示换行,不写也可以,但是存储的文本不会换行
				bw.flush();//手动强制将缓冲区的内容写入输出流
			}
			bw.close();		
			br.close();
	}
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值