【慕课笔记】4-5 字节缓冲流

4-5 字节缓冲流


8)BufferedInputStream&BufferedOutputStream这两个流类为IO提供了带缓冲区的操作,一般打开文件进行

写入或读取操作时,都会加上缓冲,这种流模式提高了io的性能

从应用程序中把数据放入文件,相当于将一缸水倒入另一个缸中:

FileOutputStream的write()方法相当于一滴一滴地把水转移过去

DataOutputStream的writeXXX()方法会方便一些,相当于一瓢一瓢地把水转移过去

BufferedOutputStream的write方法更方便,相当于一瓢一瓢水先放入桶中,再从桶中倒入到另一个缸中,性能提高


package com.yxt.haha;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
		//如果该文件不存在,则直接新建;如果存在,则删除后创建(如不想被清空掉则需要追加)
		FileOutputStream out=new FileOutputStream("demo/out.dat");//构造方法后可以是文件名,文件路径或者接着追加到文件
		//FileOutputStream out=new FileOutputStream("demo/out.dat",true);//如果不存在则创建;存在则追加内容
		out.write('A');//写出了字符‘A’的低八位
		out.write('B');//写出了字符‘B’的低八位
		int a=10;//write只能写8位,那么写一个int需要写4次每次8位
		out.write(a>>>24);
		out.write(a>>>16);
		out.write(a>>>8);
		out.write(a);
		byte[] gbk="中国".getBytes("gbk");
		out.write(gbk);
		out.close();
		IOUtil.printHex("demo/out.dat");
	}
	
	//文件拷贝,字节批量读取(效率最高)
	public static void copyFile(File srcFile,File desFile) throws IOException{
		if(!srcFile.exists())
			throw new IllegalArgumentException(srcFile+"文件不存在");
		if(!srcFile.isFile())
			throw new IllegalArgumentException(srcFile+"不是文件");
		FileInputStream in=new FileInputStream(srcFile);
		FileOutputStream out=new FileOutputStream(desFile);
		byte[] buf=new byte[8*1024];
		int b;
		while((b=in.read(buf, 0, buf.length))!=-1){
			out.write(buf,0,b);
			out.flush();//最好加上
		}
		in.close();
		out.close();
	}
	
	//进行文件的拷贝,利用带缓冲的字节流(效率较低)
	public static void copyFileByBuffer(File srcFile,File desFile) throws IOException{
		if(!srcFile.exists())
			throw new IllegalArgumentException(srcFile+"文件不存在");
		if(!srcFile.isFile())
			throw new IllegalArgumentException(srcFile+"不是文件");
		
		BufferedInputStream bin=new BufferedInputStream(new FileInputStream(srcFile));
		BufferedOutputStream bout=new BufferedOutputStream(new FileOutputStream(desFile));
		int c;
		while((c=bin.read())!=-1){
			bout.write(c);
			bout.flush();//刷新缓冲区
		}
	}
	
	
	//单字节读取,不带缓冲进行拷贝(效率低)
	public static void copyFileByByte(File srcFile,File desFile)throws IOException{
		if(!srcFile.exists())
			throw new IllegalArgumentException(srcFile+"文件不存在");
		if(!srcFile.isFile())
			throw new IllegalArgumentException(srcFile+"不是文件");
		
		FileInputStream bin=new FileInputStream(srcFile);
		FileOutputStream bout=new FileOutputStream(desFile);
		int c;
		while((c=bin.read())!=-1){
			bout.write(c);
			bout.flush();//刷新缓冲区
		}
		bin.close();
		bout.close();
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值