博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
流之过滤器流(缓冲流)
阅读量:6223 次
发布时间:2019-06-21

本文共 1493 字,大约阅读时间需要 4 分钟。

  hot3.png

BufferedOutputStream类将写入的数据存储在缓冲区中(一个名为buf的保护字节数组字段),直到缓冲区满刷新输出流。然后它将数据一次全部写入底层输出流。如果一次写入多字节,这与多次写入少量字节(但字节加起来是一样的)相比,前者往往要快得多。对于网络连接尤其是这样,因为每个TCP片或UDP包都有一定数量的开销,一般大约为40字节。这意味着,如果一次发送1字节,那么发送1K数据实际上需要通过线缆发送40K,而一次全部发送只需要发送1K多一点点数据。大多数网卡和TCP实现自身都提供了一定程序的缓冲,所以实际的数量不会那么夸张。尽管如此,缓冲网络输出通常会带来巨大的性能提升

BufferedInputStream类也有一个作为缓冲区的保护字节数组,名为buf。当调用某个流的read()方法时,它首先尝试从缓冲区获得请求的数据。只有当缓冲区没有数据时,流才从底层的源中读取数据。这时,它会从源中读取尽可能多的数据存入缓冲区,而不管是否马上需要所有这些数据。不会立即用到的数据可以在以后调用read()时读取。当从本地磁盘中读取文件时,从底层流中读取几百字节的数据与读取1字节数据几乎一样快。因此,缓冲可以显著提升性能。对于网络连接,这种效果则不甚明显,在这里瓶颈往往是网络传送数据的速度,而不是网络接口向程序传送数据的速度或程序运行的速度。尽管如此,缓冲输入没有什么坏处,随着网络的速度加快会变得更为重要。

BufferedInputStream有两个构造函数,BufferedOutputStream也一样:

public BufferedInputStream(InputStream in)public BufferedInputStream(InputStream in,int bufferSize)

public BufferedOutputStream(OutputStream out)public BufferedOutputStream(OutputStream out,int bufferSize)

第一个参数是底层流,可以从中读取末缓冲的数据(input),或者向其写入缓冲的数据(output)。如果给出第二个参数,它会指定缓冲区中的字节数。否则,输入流的缓冲区大小设置为2048字节,输出流的缓冲区大小设置为512字节。缓冲区的理想大小取决于所缓冲的流是何种类型。对于网络连接,你会希望比一般的包大小更大一些。不过,这很难预测,根据本地网络连接和协议的不同也有所区别。更快、更大带宽的网络倾向于使用更大的包,不过TCP片通常不会大于1K字节

BufferedInputStream没有声明自己的任何新方法。它只覆盖了InputStream的方法。它支持标记和重置。两个多字节read()方法尝试根据需要多次从底层输入流中读取数据,从而完全填充指定的数组或子数组。只有当数组或子数组完全填满、到达流的末尾或底层流阻塞而无法进一步读取时,这两个read()方法才返回。大多数输入流都不这样做。它们在返回前只从底层流或数据源中读取一次。

BufferedOutputStream也没有声明自己的任何新方法。调用它的方法与调用任何输出流的方法是一样的。区别在于,每次写入会把数据放在缓冲区中,而不是直接放入底层的输出流。因此,需要发送数据时应当刷新输出流,这一点非常重要也就是使用了BufferedOutputStream,就必须使用flush()方法)。

转载于:https://my.oschina.net/fhd/blog/326965

你可能感兴趣的文章
CDO数据结构基础(1) 转载
查看>>
【SQL语法】系列05:AND与OR
查看>>
关于document.cookie的使用
查看>>
解决phpredis 'RedisException' with message 'read error on connection'
查看>>
UTF-8的CSV文件用Excel打开会出现乱码的解决方案
查看>>
[转]求二叉树中和为给定值的所有路径
查看>>
as3 操作xml
查看>>
MongoDB Replica Set 配置
查看>>
如何学习linux操作系统
查看>>
C语言关键字:auto、static、register、const、volatile 、extern 总结 <转>
查看>>
简明Linux命令行笔记:tail
查看>>
简明Linux命令行笔记:umask
查看>>
验证用户必选CheckBox控件
查看>>
紧跟时代步伐,让我们拥抱MVC 3
查看>>
RubyMine 5 RC 发布,新特性一览
查看>>
云计算里AWS和Azure的探究(4)
查看>>
大年初二帝都紫竹院散步
查看>>
java向图片上写字,两个图片合并的方法
查看>>
C#winform
查看>>
Script:10g中不用EM显示Active Session Count by Wait Class
查看>>