字节缓冲流

 

举一个生活中的例子:我们每次都要去河边打水,但是我们的桶一次装不了很多的水,我们觉得每次到河边打水太麻烦,于是就在房子旁边修了一个水库,作为存储河水的媒介,下次我们打水就不用去河边打水,直接从水库里面取水就可以了

 

缓冲流 也是这么一个原理,我们不用每次取数据都去硬盘中取,我们可以去缓冲区中取

BufferedInputStream  /  BufferedOutputStream

  • 提高I/O效率,减少访问磁盘的次数
  • 数据存储在缓冲区中。flush试讲缓冲区的内容写入文件,也可以直接close

 

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

 

 

读取的实例

先一个字节一个字节的读,我们使用缓冲区,看看会怎么样?

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

BufferedInputStream缓冲区其实就是内部提前按照 8 k 大小的数据读取的

小tips: 只关闭缓冲区就可以了。

 

再我们按一个数组大小来读

 

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

new String 方法是将字节数组转化成字符串

注意这样读取的数据 会产生很多的空格,请看下面这张图,蓝色区域是空格的一部分,因为每次读取都是以1K的大小读取的,不够的统统补空格,所以这种方法读取不是很完美

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

稍微修改一下,查看new String的函数

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

这样查询出来的结果就没有多余的空格了

 

 

写入的案例

 

我们使用的是 BufferedOutputStream

我们想传入字符串,但是缓冲区只接受字节类型,所以我们需要将我们写好的字符串转化成字节,可以使用getBytes();

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

注意:这里如果不写flush方法的话,在我们电脑上会有TXT文件,但是文件是空的,因为调用缓冲区的写方法,只是将数据写入了缓冲区,另外这里缓冲区的大小实际也是只有8K

 

字节缓冲流 BufferedInputStream  /  BufferedOutputStream

另外:在执行关闭操作的时候,也会再次执行flush方法。但是建议还是写入操作的时候就执行flush,防止断电丢失数据

 

相关文章: