什么是缓冲 Buffer
它是内存空间的⼀部分,在内存空间中预留了⼀定的存储空间,这些存储空间⽤来缓冲输⼊或输出的数据,这部分空间就叫做缓冲区,缓冲区是具有⼀定⼤⼩的,
为什么要⽤缓冲
- 缓冲,缓和冲击,例如操作磁盘⽐内存慢的很多,所以不⽤缓冲区效率很低。
- 数据传输速度和数据处理的速度存在不平衡,⽐如你每秒要写100次硬盘,对系统冲击很⼤,浪费了⼤量时间在忙着处理开始写和结束写这两个事件,⽤buffer暂存来,变成每10秒写⼀次硬盘,数据可以直接送往缓冲区,⾼速设备不⽤再等待低速设备,对系统的冲击就很⼩,写⼊效率⾼了。
Java IO包⾥⾯的两个缓冲类(⾼级流)
- BufferInputStream 和 BufferOutputStream
- 采⽤包装设计模式(锦上添花的意思)
- 画图
BufferInputStream 缓冲字节输⼊流
- BufferedInputStream 通过预先读⼊⼀整段原始输⼊流数据⾄缓冲区中,⽽外界对BufferedInputStream的读取操作实际上是在缓冲区上进⾏,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输⼊流中载⼊下⼀截数据填充缓冲区,然后外界继续通过缓冲区进⾏数据读取。
- 好处:避免了⼤量的磁盘IO,原始的InputStream类实现的read是即时读取的,每⼀次读取都会是⼀次磁盘IO操作(哪怕只读取了1个字节的数据),如果数据量巨⼤,这样的磁盘消耗⾮常可怕。
- 缓冲区的实现: 读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进⾏⼀次磁盘IO,载⼊⼀段数据填充缓冲,下⼀次读取⼀般情况就直接可以从缓冲区读取,减少了磁盘IO。
- 默认缓冲区⼤⼩是8k, int DEFAULT_BUFFER_SIZE = 8192;
- 常⻅构造函数
1 | //对输⼊流进⾏包装,⾥⾯默认的缓冲区是8k |
常⽤的两个⽅法
1 | /从输⼊流中读取⼀个字节 |
BufferOutputStream 缓冲字节输出流
常⻅构造函数
1 | //对输出流进⾏包装,⾥⾯默认的缓冲区是8k |
常⽤的三个⽅法
1 | //向输出流中输出⼀个字节 |
说些什么吧!