天天看点

Java过滤器流之BufferedInputStream与BufferedOutputStream3. 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());
            }
        }
    }