带缓存的输入/输出流
来源:互联网 发布:客机纸模型图纸淘宝 编辑:程序博客网 时间:2024/06/05 19:20
缓 存 可 以 说 是 的 一 种 性 能 优 化 。 缓 存 流 为 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 in , int 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行:你是谁啊
- JAVA 带缓存的输入/输出流
- 带缓存的输入/输出流
- Java_20 带缓存的输入/输出流
- 带缓存的输入流和输出流
- oracle带输入与输出参数的调用
- 带格式的输出语句及输入语句
- Ado.Net调用带输入,输出参数的存储过程
- 带进度条的输入流
- 带缓冲区的输出流
- 带缓存的字节输入输出流
- 带缓存的字符输入输出流
- 带缓存的Okhttp
- 带缓冲区的输入流(读)案例
- 带缓冲区的输出流(写)案例
- 带*密码的输入
- 带输入的Dialog
- petshop的缓存输出
- SQL----带输入、输出参数的动态SQL的执行问题
- 50. Pow(x, n)
- 取出List集合中每条记录的指定值
- 年度最佳负能量的50句, 看完让你彻底怀疑人生!
- python中的StringIO和 ByteIO
- SDR(spring.data.redis)与Sentinel高可用集群Redis客户端Jedis配置
- 带缓存的输入/输出流
- iOS-属性字符串NSAttributedString
- 【龙芯1c库】移植硬浮点FPU
- 适配器模式
- jQuery语法
- spark 中map 和flatmap 的区别
- java报错:找不到或无法加载主类
- prim 堆优化
- mac命令行方式操作DNS