目录:系统学习 Java IO---- 目录,概览

BufferedInputStream

BufferedInputStream 类为输入流提供缓冲。 缓冲可以加快IO的速度。 BufferedInputStream 不是一次从网络或磁盘读取一个字节,而是一次将更大的块读入内部缓冲区。 当从 BufferedInputStream 读取一个字节时,您正在从其内部缓冲区中读取它。 当缓冲区被完全读取时,BufferedInputStream 将另一个更大的数据块读入缓冲区。 这通常比从 InputStream 一次读取单个字节快得多,特别是对于磁盘访问和更大的数据量。

构造器
  • BufferedInputStream(InputStream in) : 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
  • BufferedInputStream(InputStream in, int size) : 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

例子:

InputStream input1 = new BufferedInputStream(new FileInputStream("D:\\test.txt"));

int bufferSize = 8 * 1024;
InputStream input2 = new BufferedInputStream(new FileInputStream("D:\\test.txt"), bufferSize);

最好使用 1024 字节倍数的缓冲区大小,最适合硬盘中的大多数内置缓冲等。

除了为输入流添加缓冲外,BufferedInputStream 的行为与 InputStream 完全相同,也支持 mark() 和 reset(); 具体请参考 InputStream ,不赘述了;

BufferedInputStream 的最佳缓冲区大小

应该使用不同的缓冲区大小进行一些实验,以找出哪些缓冲区大小似乎可以在你的具体硬件上提供最佳性能。 最佳缓冲区大小可能取决于是否将 BufferedInputStream 与磁盘或网络 InputStream 一起使用。

对于磁盘和网络流,最佳缓冲区大小也可能取决于计算机中的具体硬件。 如果硬盘一次至少读取 4KB,那么使用少于 4KB 的缓冲区是愚蠢的。 然后最好使用 4KB 倍数的缓冲区大小。 例如,使用 6KB 也是愚蠢的。

即使你的磁盘读取例如块 一次 4KB ,使用大于此的缓冲区仍然是个好主意。 磁盘擅长顺序读取数据 - 这意味着它擅长读取位于彼此之后的多个块。 因此,使用带有 BufferedInputStream 的 16KB 缓冲区或 64KB 缓冲区(甚至更大)仍然可以提供比仅使用 4KB 缓冲区更好的性能。

BufferedOutputStream

BufferedOutputStream 类为输出流提供缓冲。 缓冲可以加快 IO 的速度。 您不是一次向网络或磁盘写入一个字节,而是一次写入一个更大的块。 这通常要快得多,特别是对于磁盘访问和更大的数据量。

构造器

参考 BufferedInputStream

和 BufferedInputStream 差不多,除了为输入流添加缓冲外,BufferedOutputStream 的行为与 OutputStream 完全相同。 唯一的区别是,如果您需要绝对确定到目前为止写入的数据是从缓冲区刷出并进入网络或磁盘,则可能需要调用 flush() 方法。

BufferedOutputStream的最佳缓冲区大小

参考 BufferedInputStream ;

系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream的更多相关文章

  1. 系统学习 Java IO (八)----装饰流 FilterInputStream/FilterOutputStream

    目录:系统学习 Java IO---- 目录,概览 这两个流的作用是:"封装其它的输入流,并为它们提供额外的功能" 他们的直接子类有: BufferedInputStream 的作 ...

  2. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream

    目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...

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

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

  4. 系统学习 Java IO (十一)----打印流 PrintStream

    目录:系统学习 Java IO---- 目录,概览 PrintStream 类可以将格式化数据写入底层 OutputStream 或者直接写入 File 对象. PrintStream 类可以格式化基 ...

  5. 系统学习 Java IO ---- 目录,概览

    Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...

  6. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  7. 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream

    目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...

  8. 字节缓冲流 ( BufferedInputStream / BufferedOutputStream)

    package com.sxt.reader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; imp ...

  9. 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream

    目录:系统学习 Java IO---- 目录,概览 ByteArrayInputStream 如果数据存储在数组中,ByteArrayInputStream 可以很方便读取,它可以返回 InputSt ...

随机推荐

  1. 在动态THML语句中调用JS函数传递带空格参数的问题

    刚刚遇到一个问题,调用js函数的参数里带空格,造成调用失败的问题.   部分代码如下: html+="<div><a href=javascript:confirm(&qu ...

  2. HDU2665 Kth number 【合并树】

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. WPF 用Clip属性实现蒙板特效

    原文:WPF 用Clip属性实现蒙板特效 上一篇,已简单介绍Clip属性的用法,这一篇用它来实现简单蒙板功能,很简单,直接上代码 <Window x:Class="擦除效果.MainW ...

  4. TargetNullValue与FallbackValue

    原文:TargetNullValue与FallbackValue TargetNullValue与FallbackValue都是BindingBase的属性. TargetNullValue:获取或设 ...

  5. ThreadPool类(线程池)

    原文:ThreadPool类(线程池) CLR线程池并不会在CLR初始化时立即建立线程,而是在应用程序要创建线程来运行任务时,线程池才初始化一个线程.线程池初始化时是没有线程的,线程池里的线程的初始化 ...

  6. WPF中的文字修饰——上划线,中划线,基线与下划线

    原文:WPF中的文字修饰——上划线,中划线,基线与下划线 我们知道,文字的修饰包括:空心字.立体字.划线字.阴影字.加粗.倾斜等.这里只说划线字的修饰方式,按划线的位置,我们可将之分为:上划线.中划线 ...

  7. gnuradio companion 找不到第三方模块gr-osmosdr的问题

    我使用了来自Ettus的gnuradio软件包,之后安装了gr-osmosdr 以在gnuradio中调用RTL电视棒. 但是在gnuradio companion找不到来自rtlsdr-source ...

  8. Go 的文件系统抽象 Afero

    Afero 是一个文件系统框架,提供一个简单.统一和通用的 API 和任何文件系统进行交互,作为抽象层还提供了界面.类型和方法.Afero 的界面十分简洁,设计简单,舍弃了不必要的构造函数和初始化方法 ...

  9. AndroidStudio下的依赖管理

    在开发中用第三方库是很常见的事,如何在AndroidStudio下管理这些依赖呢?这就是这篇文章的目的. 目录 Maven/Ivy仓库依赖 Module依赖 aar文件依赖 jar文件依赖 例子完整代 ...

  10. Mysql下载(on windows-noinstall zip archive)

    所有内容,都是针对Mysql5.7.18介绍. 1.首先你需要下载一个完整的包,Mysql目前有两个版本可以使用: a. MySql Enterprise Edition:企业版 b. MySql C ...