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缓存流速度与硬盘_系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream...相关推荐

  1. java inputstream 回退_系统学习 Java IO (十)----回退流 PushbackInputStream

    PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定如何解释当前字节, PushbackInputStr ...

  2. java最长公共子序列算法_算法学习——java实现最长公共子序列

    实验目的: 输入两个相同类型的序列,用动态规划方法计算他们的最长公共子序列的长度以及序列. 思路: 1.先用一个二维数组存储最长公共子序列的长度,还要记录每个值的状态 2.根据记录值的状态,递归回溯求 ...

  3. 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)

    系统学习JAVA第十七天 第一阶段在2021.2.1结束了! 一.数据传输 IO输入和输出,硬盘之间的数据交换 1.文件读写流程 ①创建文件的容器 ②判断方向 合适的类 创建和文件之间的通道 ③ 调用 ...

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

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

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

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

  6. 作为初学者,应该如何系统学习Java呢?

    Java编程语言发展的迅猛,每年的Java人才缺口人数都高达百万以上.作为IT小白应该如何系统学习Java呢?作为过来人,小千在这里给大家一些中肯的意见,希望对大家的工作和学习Java有一定的借鉴作用 ...

  7. java学习笔记30(IO :缓冲流)

    缓冲流: 读取数据大量的文件时,读取的速度慢,java提供了一套缓冲流,提高IO流的效率: 缓冲流分为字节缓冲流和字符缓冲流: 字节输入缓冲流和字节输出缓冲流如下: package com.zs.De ...

  8. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...

  9. JAVA毕设项目社区电商平台系统(java+VUE+Mybatis+Maven+Mysql)

    JAVA毕设项目社区电商平台系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Web ...

最新文章

  1. 在一个公司死磕了5-10年的人,最后都怎么样了?
  2. pycharm提示 Method 'xxx' may be 'static'(类方法与静态方法)
  3. 209. Minimum Size Subarray Sum 长度最小的子数组
  4. I see IC的破冰之旅
  5. BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
  6. 华为交换机linux版本号,Cisco和华为交换机常用配置命令总结
  7. C两个小例子(数组与指针)
  8. git获取管理员权限 windows,windows下git怎么管理权限
  9. php 5.5.12 yaf,yaf框架教程(5)- yaf框架的启动文件
  10. 压力测试以及编译安装httpd2.4
  11. 从零起步的数据中心规划和建设
  12. 2016ACM/ICPC亚洲区大连站题解
  13. 人脸对齐(十二)--PIFA2017
  14. sharepoint学习资料-个人博客
  15. 水仙花数(python)
  16. 家庭网络对外网络服务搭建指南
  17. 码云上传文件夹_本地上传码云文件
  18. day7-列表和元组
  19. Android开发随手记1
  20. CSS3新特性详细介绍

热门文章

  1. R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(样本个数、均值、标准差、中位数、剔除异常均值、最小最大值、数据范围极差、偏度、峰度、均值标准差等)
  2. R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长)、使用bind_cols函数横向合并两个dataframe(列生长)
  3. R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注、特殊区域标注
  4. R语言t分布函数Student t distribution(dt, pt, qt rt )实战
  5. Plotly绘制金融时间序列图实战:配置滑动控件
  6. python使用正则表达式判别字符串是否以一个大写字符起始而跟随了一些小写字符
  7. 梯度爆炸是什么?有什么后果?如何判断梯度爆炸?如何避免梯度爆炸?
  8. Spark基础知识解答
  9. 影像组学视频学习笔记(33)-使用SimpleITK实现医学影像差值、Li‘s have a solution and plan.
  10. linux 别名管理,Linux 的 15 个命令行别名, 帮系统管理员提升工作效率!