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());
			}
		}
	}

如有问题请扫码联系我
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页