缓冲区的作用是缓存数据,防止数据丢失,通过使用数组和循环结构,可以实现缓冲区的模拟。不多废话直接进入正题。
1. 首先我们定义一个含有8个地址(8个元素)的数组 Buf [7] ,黄色填充部分表示当前的地址可以写入数据
2. head表示数组的头部,当进行read读操作时,head右移;tail表示数组的尾部,当进行write写操作时,tail右移。现在我们将字符串"HELLO"写入数组当中
……
……
……
3. 到此"HELLO"填充进数据前5个地址且一直没有读取数据(写入的数据没有进行处理),所以head/read没有移动。
4. 继续重复将"HELLO"填充进数组,当填充到"HEL"时数组填满
5. 此时,如果对已经填充(写入)的数据进行读取(处理写入的数据),那么处理n个地址的数据,head/read就会向前移动n个地址,经过处理之后的数据的地址(黄色部分)就可以继续重新被新的数据填充(写入),相反没有经过处理的数据的地址便不能被新的数据填充(写入)。可以理解head/read为分界线,新数据只能填充到head/read以前的地址
6. 此时,如果进行填充(写入)数据,那么tail/write便循环回从第0个地址,也就是刚开始的地址,将"HEL"后面的字符"LO",从第0个地址填充(写入)。
……
……
……
7. 如果,一直不对填充(写入)的数据进行处理(读取),那么数据填充(写入)一段时间后,tail/write=head/read,此时,认为数组填满。