带缓存的输入/输出流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gugaopeng19940928/article/details/77219845

缓 存 可 以 说 是 的 一 种 性 能 优 化 。 缓 存 流 为 I/O 流 增 加 了 内 存 缓 存 区 。 有 了 缓 存 区 , 使 得 在 流 上 执 行 skip() 、 mark() 和 reset() 方 法 都 成 为 可 能 。

BufferedInputStream 类 与 BufferedOutputStream 类

BufferedInputStream 类 可 以 对 任 意 的 InputStream 类 进 行 带 缓 存 区 的 包 装 以 达 到 性 能 的 优 化 。

BufferInputStream 类 有 两 个 构 造 函 数 :
■ BufferedInputStream(InputStreamin)
■ BufferedInputStream(InputStream in , int size)

第 一 种 形 式 的 构 造 函 数 创 建 了 一 个 带 有 32 个 字 节 的 缓 存 流 : 第 二 种 形 式 的 构 造 函 数 按 指 定 的 大 小 来 创 建 缓 存 区 。 一 个 最 优 的 缓 存 区 的 大 小 , 取 决 于 它 所 在 的 操 作 系 统 、 可 用 的 内 存 空 间 以 及 机 器 配 置 。 从 构 造 函 数 可 以 看 出 , BufferedInputStream 对 象 位 于 InputStream 类 对 象 之 前 。
下图 描 述 了 字 节 数 据 读 取 文 件 的 过 程 。
这里写图片描述

使 用 BufferedOutputStream 输 出 信 息 和 向 Outputstream 输 入 信 息 完 全 一 样 , 只 不 过 BufferedOutputStream 有 一 个 flush() 方 法 用 来 将 缓 存 区 的 数 据 强 制 输 出 完 。BufferedOutputStream类 也 有 两 个 构 造 方 法 :

■  BufferedOutputStream(OutputStream in) 
■  BufferedOutputStream(OutputStream inint size) 

第 一 种 构 造 函 数 创 建 一 个 32 个 字 节 的 缓 存 区 , 第 二 种 形 式 以 指 定 的 大 小 来 创 建 缓 存 区 ·

〖! 注 意〗

flush() 方 法 就 是 用 于 即 使 缓 存 区 没 有 满 的 情 况 下 , 也 将 缓 存 区 的 内 容 强 制 写 入 到 外 设 ,
习 惯 上 称 这 个 过 程 为 刷 新 。flush()方 法 只 对 使 用 缓 存 区 的 OutputStream 类 的 子 类 有 效 · 当 调 用 close()方法时 , 系 统 在 关 闭 流 之 前 , 也 会 将 缓 存 区 中 信 息 刷 新 到 磁 盘 文 件 中。


BufferedReader 类 与 BufferedWriter 类

BufferedReader 类 与 BufferedWriter 类 分 别 继 承 Reader 类 与 Writer 类 。 这 两 个 类 同 样 具 有 内 部 缓 存 机 制 , 并 可 以 行 为 单 位 进 行 输 入 / 输 出 · 根 据 BufferedReader 类 的 特 点 , 总 结 出 如 图 12 . 19 所 示 的 字 符 数 据 读 取 文 件 的 过 程 。

下图是BufferedReader 类 读 取 文 件 的 过 程

这里写图片描述
BufferedReader 类 常 用 的 方 法 如 下 。
『 read()方法:读取单个字符。
『 readLine()方法:读取一个文本行,并将其返回为字符串;若无数据可读,则返回null。
『 write(Strings , int off, int len) 方 法 : 写 入 字 符 串 的 某 一 部 分 。
『 flush() 方 法 : 刷 新 该 流 的 缓 存 。
『 newLine() 方 法 : 写 入 一 个 行 分 隔 符 。

在 使 用 BufferedWriter类 的 Write() 方 法 时 , 数 据 并 没 有 立 刻 被 写 入 至 输 出 流 中 , 而 是 首 先 进 入 缓 存 区 中 。 如 果 想 立 刻 将 缓 存 区 中 的 数 据 写 入 输 出 流 中 , 一 定 要 调 用 flush() 方 法 。

〖 例 〗 本 实 例 向 指 定 的 磁 盘 文 件 中 写 入 数 据 , 并 通 过 BufferedReader 类 将 文 件 中 的 信 息 分
行 显 示 。

/*
 * 导入Java.io包
 */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Student {   //创建类 
    public static void main(String[] args) {  //主方法
        String content[]={"你好","我是小猫","你是谁啊"};  //定义字符串
        File file=new File("d:/123.txt");   //创建文件对象
        /*
         * 写
         */
        FileWriter fw=null;   //声明对象
        BufferedWriter bw=null; //声明对象 
        try {
            fw=new FileWriter(file);   //创建对象
            bw=new BufferedWriter(fw);
            //遍历数组
            for(int k=0;k<content.length;k++){
                //将字符数组中 元素写入到磁盘文件
                bw.write(content[k]);
                //将数组中的单个元素以单行的形式写入文件。
                bw.newLine();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                bw.close();  //关闭流
                fw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        /*
         * 写
         */
        FileReader fr=null;
        BufferedReader br=null;

        try {
            fr=new FileReader(file);
            br=new BufferedReader(fr);
            String s=null;
            int  i=1;
            while((s=br.readLine())!=null){

                System.out.println("第"+(i++)+"行:"+s);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

结果:
第1行:你好
第2行:我是小猫
第3行:你是谁啊

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页