系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream
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的更多相关文章
- 系统学习 Java IO (八)----装饰流 FilterInputStream/FilterOutputStream
目录:系统学习 Java IO---- 目录,概览 这两个流的作用是:"封装其它的输入流,并为它们提供额外的功能" 他们的直接子类有: BufferedInputStream 的作 ...
- 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream
目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...
- 系统学习 Java IO (十)----回退流 PushbackInputStream
目录:系统学习 Java IO---- 目录,概览 PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定 ...
- 系统学习 Java IO (十一)----打印流 PrintStream
目录:系统学习 Java IO---- 目录,概览 PrintStream 类可以将格式化数据写入底层 OutputStream 或者直接写入 File 对象. PrintStream 类可以格式化基 ...
- 系统学习 Java IO ---- 目录,概览
Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...
- 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream
目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...
- 字节缓冲流 ( BufferedInputStream / BufferedOutputStream)
package com.sxt.reader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; imp ...
- 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream
目录:系统学习 Java IO---- 目录,概览 ByteArrayInputStream 如果数据存储在数组中,ByteArrayInputStream 可以很方便读取,它可以返回 InputSt ...
随机推荐
- FastDFS安装、配置、部署(三)-Storage配置具体解释
1.基本配置 # is this config file disabled # false for enabled # true for disabled disabled=false # the n ...
- 制作一个简单的WPF图片浏览器
原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1. 对指定文件夹下所有JPG文件进行预览2. 对选定图片进行旋转3. 对选定图片 ...
- Frequentist 观点和 Bayesian 观点
1. Frequentist view Frequentist approach views the model parameters as unknown constants(未知的常数,而不是一个 ...
- C# WPF 实现鼠标固定在指定范围内运动
原文:C# WPF 实现鼠标固定在指定范围内运动 一.背景: 需要实现带有三个屏幕,三个屏幕分别显示窗体,但鼠标只能在主窗体中运动,不能移动到其他的两个附屏中. 二.实现: 具体实现使用的是u ...
- OpenGL(七) 光照模型及设置
OpenGL把现实世界中的光照系统近似归为三部分,分别是光源.材质和光照环境. 光源就是光的来源,是"光"这种物质的提供者: 材质是指被光源照射的物体的表面的反射.漫反射(Open ...
- Matlab Tricks(二十一)—— 软阈值函数的实现
dj,k^=⎧⎩⎨⎪⎪dj,k−λ,dj,k≥λ0,otherwisedj,k+λ,dj,k≤−λ function y = soft(x, T) y = (x - abs(T) > 0) .* ...
- symfony 数据库表生成实体、迁移数据库
从数据库表生成实体 1. 由数据库生成模型: php bin/console doctrine:mapping:convert --from-database yml D:\db\ D:\test_b ...
- MVC WebApi
两种web服务 •SOAP风格:基于方法,产品是WebService •REST风格:基于资源,产品是WebAPI 对于数据的增.删.改.查,提供相对的资源操作,按照请求的类型进行相应处理,主要包括G ...
- UNITY VR 视频/图片 开发心得(二)
上回说到了普通的全景图片,这回讲真正的VR. 由于这种图片分为两部分,所以我们需要两个Camera对象以及两个球体.首先新建一个Camera对象,并将其命名为RightEye(其它名字也无妨,只要你自 ...
- 利用winIO3.0进行windows10 64bit端口读取
一.winIO介绍 WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作.通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,它绕过了Windows系统的保 ...