Java过滤器流之BufferedInputStream与BufferedOutputStream

点此查看全部文字教程、视频教程、源代码

1. 简介

过滤器流就是串联在流上,执行一些额外操作的东西。其中很重要,很常用的就是缓冲流BufferedInputStream与BufferedOutputStream。

缓冲流的作用简单而直接而有效,每次读写不是只有几个字节就开始从磁盘等数据源读写,而是先放到内存的缓冲区(其实就是类似于byte[]类型的内存变量中),等缓冲区满了(具体缓冲区多大可以自己定义)再一次性读写数据源。

因为内存读写速度远远快于磁盘等其他介质读写速度,所以缓存的存在是有意义的。

2. BufferedInputStream示例

工具类,保存定义的常量及方法(暂时只有常量)

//工具类
package com.maoge.stream;
import java.io.File;
public class StreamUtils {
	//用于定义每次读取的长度
	public static final int BUFFER_LENGTH=512;
	//文件对象
	public static File FILE_FOR_READ;
	public static File FILE_FOR_WRITE;
	static{
		FILE_FOR_READ=new File("C:\\test.txt"); 
		FILE_FOR_WRITE=new File("C:\\result.txt"); 
	}
}

读取示例,一定要注意文件编码

//使用缓冲流读入
	public static void bufferedRead(){
		InputStream in=null;
		try {
			in = new FileInputStream(StreamUtils.FILE_FOR_READ);
			//使用缓冲流串联,因为BufferedInputStream也是InputStream子类
			in=new BufferedInputStream(in);
			//保存读出的内容
			StringBuilder sb=new StringBuilder();
			//定义缓冲区
			byte[] buffer=new byte[StreamUtils.BUFFER_LENGTH];
			//实际读到的字符长度
			int bytesRead=0;
			while((bytesRead=in.read(buffer))!=-1){
				//注意编码,文本文件要另存为UTF-8格式,然后此处也写明按UTF-8读取。
				sb.append(new String(buffer,0,bytesRead,"UTF-8"));
			}
			System.out.println(sb.toString());
		} catch (Exception ex) {
			System.out.println(ex.toString());
		}finally{
			try {
				in.close();
			} catch (IOException ioEx) {
				System.out.println(ioEx.toString());
			}
		}
	}

3. BufferedOutputStream示例

注意.flush()是强制将缓冲区内容输出到流,因为有时候缓冲区挺大,而且还没满,是不会自动输出到流的,所以有时候就会得不到程序员员设想的结果,所以为了保险,在确保得到结果时先.flush()

public static void bufferedWrite(){
		OutputStream out=null;
		try {
			out = new FileOutputStream(StreamUtils.FILE_FOR_WRITE);
			out=new BufferedOutputStream(out);
			String content="这就是要写入的内容,我要吟诗一首:今天我是真高兴!";
			out.write(content.getBytes(), 0, content.getBytes().length);
			//刷新!
			out.flush();
		} catch (Exception ex) {
			System.out.println(ex.toString());
		}finally{
			try {
				out.close();
			} catch (IOException ioEx) {
				System.out.println(ioEx.toString());
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值