字节缓冲流
举一个生活中的例子:我们每次都要去河边打水,但是我们的桶一次装不了很多的水,我们觉得每次到河边打水太麻烦,于是就在房子旁边修了一个水库,作为存储河水的媒介,下次我们打水就不用去河边打水,直接从水库里面取水就可以了
缓冲流 也是这么一个原理,我们不用每次取数据都去硬盘中取,我们可以去缓冲区中取
BufferedInputStream / BufferedOutputStream
- 提高I/O效率,减少访问磁盘的次数
- 数据存储在缓冲区中。flush试讲缓冲区的内容写入文件,也可以直接close
读取的实例
先一个字节一个字节的读,我们使用缓冲区,看看会怎么样?
BufferedInputStream缓冲区其实就是内部提前按照 8 k 大小的数据读取的
小tips: 只关闭缓冲区就可以了。
再我们按一个数组大小来读
new String 方法是将字节数组转化成字符串
注意这样读取的数据 会产生很多的空格,请看下面这张图,蓝色区域是空格的一部分,因为每次读取都是以1K的大小读取的,不够的统统补空格,所以这种方法读取不是很完美
稍微修改一下,查看new String的函数
这样查询出来的结果就没有多余的空格了
写入的案例
我们使用的是 BufferedOutputStream
我们想传入字符串,但是缓冲区只接受字节类型,所以我们需要将我们写好的字符串转化成字节,可以使用getBytes();
注意:这里如果不写flush方法的话,在我们电脑上会有TXT文件,但是文件是空的,因为调用缓冲区的写方法,只是将数据写入了缓冲区,另外这里缓冲区的大小实际也是只有8K
另外:在执行关闭操作的时候,也会再次执行flush方法。但是建议还是写入操作的时候就执行flush,防止断电丢失数据