Java IO(十)BufferedInputStream 和 BufferedOutputStream

一、BufferedInputStream 和 BufferedOutputStream

(一)、BufferedInputStream

BufferedInputStream 是缓冲字节输入流,继承自FilterInputStream,它的作用是为另一个输入流对象提供一些额外的功能。如:缓冲功能,支持 mark(标记)和reset(重置)功能等。

BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的 BufferedInputStream 后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。

BufferedOutputStream 是缓冲字节输入流,继承自FilterOutputStream,它的作用是为另一个输出流对象提供缓冲功能。

二、构造方法

(一)、BufferedInputStream

(二)、BufferedOutputStream

三、常用API

(一)、BufferedInputStream

(二)、BufferedOutputStream

四、缓冲功能

(一)、BufferedOutputStream

BufferedOutputStream 为其它输出流提供缓冲功能。创建BufferedOutputStream 时,我们会通过它的构造函数指定某个输出流为参数。通过字节数组来缓冲数据,当缓冲区满或者用户调用 flush() 函数时,它就会将缓冲区的数据写入到输出流中。

(二)、BufferedInputStream

BufferedInputStream的作用是为其它输入流提供缓冲功能。创建BufferedInputStream时,我们会通过它的构造函数指定某个输入流为参数。BufferedInputStream会将该输入流数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从输入流中读取下一部分的数据。缓冲中的数据实际上是保存在内存中,从内存中读取数据的速度更快从而提高性能。

分批读取而不一次性读取的好处:

  • 缩短读取时间,提高读取性能。
  • 减少内存空间占用。

五、实例

private static final byte[] buffer = "abcdefghijklmnopqrstvuwxyz".getBytes();
public static void main(String[] args) {
  write();
  read();
} /**
* BufferedOutputStream 测试
*/
public static void write() {
  BufferedOutputStream out = null;
  try {
    out = new BufferedOutputStream(new FileOutputStream(new File("test.txt")));
    out.write(buffer);
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      if (out != null)
        out.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
} /**
* BufferedInputStream 测试
*/
public static void read() {
  BufferedInputStream in = null;
  byte[] bu = new byte[10];
  int len = 0;
  try {
    in = new BufferedInputStream(new FileInputStream(new File("test.txt")));
    int temp = in.read();// 获取单字节数据
    System.out.println("temp : " + (char)temp);     in.mark(5);// 标记第五个元素
    in.skip(10);// 跳过10个字节     len = in.read(bu,0,5);// 获取5字节数据
    System.out.println("bu : " + new String(bu,0,len));     in.reset();// 重置     len = in.read(bu,0,5);// 获取5字节数据
    System.out.println("bu : " + new String(bu,0,len));
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      if (in != null)
        in.close();
    }catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Java IO(十) BufferedInputStream 和 BufferedOutputStream的更多相关文章

  1. Java IO流 BufferedInputStream、BufferedOutputStream的基本使用

    BufferedInputStream.BufferedOutputStream的基本使用 BufferedInputStream是FilterInputStream流的子类,FilterInputS ...

  2. java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例

    本章内容包括3个部分:BufferedOutputStream介绍,BufferedOutputStream源码,以及BufferedOutputStream使用示例. 转载请注明出处:http:// ...

  3. [Java] 过滤流BufferedInputStream和BufferedOutputStream

    package test.stream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  4. 系统学习 Java IO (十六)----这么多类,应该用哪个?

    目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...

  5. 系统学习 Java IO (十二)----数据流和对象流

    目录:系统学习 Java IO---- 目录,概览 DataInputStream/DataOutputStream 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型. 要想使用 ...

  6. Java之IO(二)BufferedInputStream和BufferedOutputStream

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6971234.html 1.前言 本文主要介绍输入输出流中的BufferedInputStream和Buffere ...

  7. 系统学习 Java IO (十四)----字符读写缓存和回退 BufferedReader/BufferedWriter & PushbackReader

    目录:系统学习 Java IO---- 目录,概览 BufferedReader BufferedReader 类构造器接收一个 Reader 对象,为 Reader 实例提供缓冲. 缓冲可以加快 I ...

  8. 系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类

    目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader LineNumberReader 类是一个 BufferedReader ,用于跟踪读取 ...

  9. 系统学习 Java IO (十)----回退流 PushbackInputStream

    目录:系统学习 Java IO---- 目录,概览 PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定 ...

  10. 高级Java工程师必备 ----- 深入分析 Java IO (三)

    概述 Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO( ...

随机推荐

  1. 慎用ToLower和ToUpper,小心把你的系统给拖垮了

    不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一: ...

  2. 从一条数据说起——InnoDB存储数据结构

    本篇博客参考掘金小册--MySQL 是怎样运行的:从根儿上理解 MySQL 先给大家讲一个故事,我刚参加工作,在一个小作坊里面当[码畜](尽管现在也是),有一天老板从我背后走过,说了一句举世震惊的话: ...

  3. sshd: no hostkeys available — exiting

    在开启SSHD服务时报错.sshd re-exec requires execution with an absolute path用绝对路径启动,也报错如下:Could not load host ...

  4. STM32 使用st-link调试遇到写保护 Flash Timeout 问题的解决思路

    本文介绍了如何解决STM32芯片Flash写保护导致无法下载程序,无法在线调试的问题:如果您遇到相同的问题,希望本文可以带来一些帮助: 如果本文帮到了您,请帮忙点个赞

  5. LeetCode二分专题

    二分 二分模板 两个模板:1.最大值最小模板一,2.最小值最大用模板二 单调性.两段性的性质 版本1:二分绿色端点是答案,最大值最小 int bsearch_1(int l, int r){ whil ...

  6. python 基础知识3-列表元祖

    1.列表增. # append 追加,给列表的最后面追加一个元素 li = ['alex','wufa','太白','大白'] li.append('教师') li.append(1) print(l ...

  7. Java设计模式之建造者模式(Builder Pattern)

    前言 这篇文章主要向大家讲解什么是建造者模式,建造者模式的实例讲解及应用场景等知识点. 一.建造者介绍 ​ 用户可以不知道产品的构建细节直接可以创建复杂的对象,主要是分离了产品的构建和装配,这样就实现 ...

  8. python --集合set的学习

    集合是一个无序的不重复的元素序列,一般我们使用set(value)函数来创建集合. 如下: 定义以及添加元素,以及注意点如下: 再如下:

  9. JPA 分页处理

    1.要实现jpa分页管理首先得要正确配置jpa环境,在spring环境中的配置如下: 开启注解功能 <bean class="org.springframework.orm.jpa.s ...

  10. 【SMB源码解析系列】——003.SMB游戏基本框架

    前面有了解到RESET中断相关代码,结尾处通过一句jmp进入了无限循环,之后CPU将会在每一帧PUU进入VBlank状态时,接收NMI中断信号, 跳转至NMI代码处继续执行,直到遇见RTI指令时又返回 ...