循环缓冲和缓冲池java_缓冲池循环存储读写方法与流程

df7b20737a250e07eaadcde67a09ef89.gif

本发明具体涉及一种缓冲池循环存储读写方法。

背景技术:

循环缓冲区用于表示一个固定尺寸、头尾相连的缓冲区,适合缓存数据流的一种数据结构,现有循环缓冲区读写方法并不能满足日常工作需要,因此急需一种缓冲池循环存储读写方法以解决这一问题。

技术实现要素:

本发明的目的在于针对现有技术的不足,提供一种缓冲池循环存储读写方法,该缓冲池循环存储读写方法可以很好地解决上述问题。

为达到上述要求,本发明采取的技术方案是:提供一种缓冲池循环存储读写方法,该缓冲池循环存储读写方法包括循环存储数据写入方法和循环存储数据读取方法;

循环存储数据写入方法包括如下步骤:

S1:创建缓冲池,并准备写入数据;

S2:检测写入数据的长度,若写入数据的长度小于剩余空间则结束本次数据写入,若所述写入数据的长度大于剩余空间则进行数据写入 ;

S3:检测是否到缓存末尾,若是则将写指针移动到缓存起始处再向后移动并结束本次数据写入,若否将写指针向后移动并结束本次数据写入 ;

循环存储数据读取方法包括如下步骤:

S1:获取读取数据的长度 ;

S2:进行数据读取 ;

S3:检测是否到缓存末尾,若是则将将读指针移动到缓存起始处再向后移动并结束本次数据读取,若否则将读指针向后移动并结束本次数据读取。

该缓冲池循环存储读写方法具有的优点如下:

该缓冲池循环存储读写方法开辟一块连续的存储区,可以不断地读、写数据,当写入到存储区的末尾的时候,再从存储区的首部再开始写入数据,由此不断地重复下去构成了循环缓冲池,缓冲池可以存储多次的接收数据,待需要时按循序取出。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,在这些附图中使用相同的参考标号来表示相同或相似的部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1示意性地示出了根据本申请一个实施例的缓冲池循环存储读写方法的数据写入流程图。

图2示意性地示出了根据本申请一个实施例的缓冲池循环存储读写方法的数据读取流程图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,以下结合附图及具体实施例,对本申请作进一步地详细说明。

在以下描述中,对“一个实施例”、“实施例”、“一个示例”、“示例”等等的引用表明如此描述的实施例或示例可以包括特定特征、结构、特性、性质、元素或限度,但并非每个实施例或示例都必然包括特定特征、结构、特性、性质、元素或限度。另外,重复使用短语“根据本申请的一个实施例”虽然有可能是指代相同实施例,但并非必然指代相同的实施例。

为简单起见,以下描述中省略了本领域技术人员公知的某些技术特征。

根据本申请的一个实施例,提供一种缓冲池循环存储读写方法,如图1-2所示,包括循环存储数据写入方法和循环存储数据读取方法;

所述循环存储数据写入方法包括如下步骤:

S1:创建缓冲池,并准备写入数据;

S2:检测写入数据的长度,若所述写入数据的长度小于剩余空间则结束本次数据写入,若所述写入数据的长度大于剩余空间则进行数据写入 ;

S3:检测是否到缓存末尾,若是则将写指针移动到缓存起始处再向后移动并结束本次数据写入,若否将写指针向后移动并结束本次数据写入 ;

所述循环存储数据读取方法包括如下步骤:

S1:获取读取数据的长度 ;

S2:进行数据读取 ;

S3:检测是否到缓存末尾,若是则将将读指针移动到缓存起始处再向后移动并结束本次数据读取,若否则将读指针向后移动并结束本次数据读取。

根据本申请的一个实施例,该缓冲池循环存储读写方法的串口将接收的数据放入缓存池中,同时记录指针位置。

根据本申请的一个实施例,该缓冲池循环存储读写方法的缓存初始化后,读、写指针都位于缓存池起始位置。

根据本申请的一个实施例,该缓冲池循环存储读写方法的基于串口循环读写缓存池说明:首先建立一个结构体,结构体中定义了一个数组、读、写指针,数组用作循环缓存池,指针判断缓存池使用状态。串口将接收的数据放入缓存池中,同时记录指针位置。缓存初始化后,读、写指针都位于缓存池起始位置,此时可对缓冲池进行读、写操作。

写数据:收到长度小于缓存池的剩余容量的数据后将数据写入缓冲池,每写入一个字节,写指针向后移动一个字节。当写指针位于缓存池末尾时,下一次移动到缓存的起始位置;初始化时读写指针位于缓存开始处,读指针等于写指针,表示缓存为空,当有数据写入时,写入一个字节数据,写指针向后移动一位,写指针到达缓存末尾,写入下一个字节时写指针移动到缓存开始处,并覆盖之前写入的数据。

写数据:读数据时,从读指针开始读,每读一个字节向后移动一个字节,直到读满数据长度,此时读指针等于写指针。读取数据之前需要先获取数据长度,计算数据长度的方式根据读、写指针的位置不同,可分两种情况,第一种为初始化后,写指针等于读指针,此时缓冲池中无数据,第二种为缓冲池中有数据,但是已经将数据读取。这两种情况都不应该再次读取数据。

避免缓冲池越界的处理:写数据之前判断写入数据的长度,若长度大于缓存池的剩余容量表示缓冲池已满,数据应不存入,以保证之前写入的数据不会被覆盖。缓存池的容量需要事先预估最大值,每次写入的数据长度不得大于缓存池容量的最大值。

以上所述实施例仅表示本发明的几种实施方式,其描述较为具体和详细,但并不能理解为对本发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明保护范围。因此本发明的保护范围应该以所述权利要求为准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值