java BufferedInputStream与BufferedOutputStream

 BufferedInputStream与BufferedOutputStream


 

我们有必要知道不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低。带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里。等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多!

同时正因为它们实现了缓冲功能,所以要注意在使用BufferedOutputStream写完数据后,要调用flush()方法或close()方法,强行将缓冲区中的数据写出。否则可能无法写出数据。

 

 

//构造

BufferedInputStream(InputStream in) //使用默认buf大小、底层字节输入流构建bis 

BufferedInputStream(InputStream in, int size) //使用指定buf大小、底层字节输入流构建bis  

BufferedOutputStream(OutputStream out); //使用默认大小、底层字节输出流构造bos。默认缓冲大小是 8192 字节( 8KB )
  
BufferedOutputStream(OutputStream out, int size);  //使用指定大小、底层字节输出流构造bos  

 

package IO;

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

public class BisBos {

	public static void main(String[] args) throws IOException {
		//简写异常抛出
		BufferedInputStream bis=null;
		BufferedOutputStream bos = null;
		bis= new BufferedInputStream(new FileInputStream("D:\\tt.txt"));
		bos = new BufferedOutputStream(new FileOutputStream("xx",true));
		
		byte[] b=new byte[1024];   //代表一次最多读取1KB的内容
		int length = 0 ; //代表实际读取的字节数
		while( (length = bis.read( b ) )!= -1 ){
			//length 代表实际读取的字节数
			bos.write(b, 0, length );
		}
        //缓冲区的内容写入到文件
		bos.flush();
		bos.close();
		bis.close();
	}

}

 关于流的关闭:先关闭外层流,再关闭内层流。一般情况下是:先打开的后关闭,后打开的先关闭;

另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。

例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b。

还有支持mark操作,reset操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值