本发明涉及数据处理领域,具体而言,涉及数据的缓冲方法、装置、计算机和可读存储介质。
背景技术:
数据通信协议中分为两种格式:数据帧格式和数据流格式。如传输控制协议(transmissioncontrolprotocol,简称为tcp)和rs232协议都是属于典型的数据流格式,数据流格式需要定义数据的帧头帧尾,并放置在足够大缓冲(buffer)中,通过分析缓冲中的帧头和帧尾来提取数据帧。
在相关技术中,缓存数据流的结构一般是先进先出的环形缓冲队列,目前一般的环形缓冲队列的实现方式为:环形缓冲区有一个读指针和一个写指针,读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区,通过移动移动读指针和写指针就可以实现缓冲区的数据读取和写入。
然而,基于相关技术的环形缓冲的基本实现原理和模型,在实际应用中存在问题:单向队列首尾相衔时,会出现帧头帧尾数据被截断,导致分包粘包、程序复杂,处理效率低,甚至存在处理错误的情况发生,例如,帧头数据被截断的情况:帧头的标志位信息在缓冲队列尾部,但是帧头的长度信息在缓冲队列头部,由于内存地址不连续,无法用一个结构指针去判断帧头的信息正确性,只能用内存地址偏移再拼接的方式去重新拷贝数据构建一个新帧头,再对帧头的信息进行正确性判断,这样在搜寻帧头时不可避免的导致缓冲队列的性能下降。
另外,在相关技术中的产品线上,机器人和plc设备很多都是嵌入式设备,工作性能差,直接在局域网内用tcp中的套字节(socket)协议做通讯协议,并没有考虑分包粘包的问题。
针对相关技术中,数据流格式的数据缓冲分包粘包和处理效率低的问题,目前尚未提出有效的解决方案。
技术实现要素:
针对相关技术中,数据流格式的数据缓冲分包粘包和处理效率低的问题,目前尚未提出有效的解决方案,以至少解决上述问题。
根据本发明的一个方面,提供了一种数据的缓冲方法,该方法包括:
获取写入数据,将所述写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列;
获取读取指令,根据所述读取指令读取所述环形缓冲队列的有效帧数据。
在其中一个实施例,所述根据所述读取指令读取所述环形缓冲队列的有效帧数据包括:
在所述环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;
根据所述帧头标志获取帧长度,帧尾指针偏移所述帧长度获取帧尾标志和校验码;
判断所述帧尾标志是否正确和验证所述校验码是否通过;
在所述判断正确和所述验证通过的情况下,判断所述帧数据为有效帧数据;
在所述判断错误或者所述验证不通过的情况下,丢弃所述帧数据。
在其中一个实施例,所述写入空间包括第一写入空间和第二写入空间,将所述写入数据写入环形缓冲队列的写入空间包括:
在所述写入数据的大小大于所述第一写入空间的情况下,将所述写入数据的第一部分数据写入所述第一写入空间,将所述写入数据的第二部分数据写入所述第二写入空间;
在所述第一写入空间或者所述第二写入空间的位置位于所述头数据的情况下,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列。
在其中一个实施例,所述根据所述读取指令读取所述环形缓冲队列的有效帧数据包括:
在所述有效帧数据的帧头被所述环形缓冲队列截断的情况下,复制所述帧头被截断的数据到所述单向队列的结尾组成所述环形缓冲队列。
在其中一个实施例,所述根据所述读取指令读取所述环形缓冲队列的有效帧数据包括:
在所述环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;
根据所述帧头标志获取帧长度,帧尾指针偏移所述帧长度后获取帧尾长度;在所述帧长度和帧尾长度之和大于所述环形缓冲队列的情况下,丢弃所述帧数据;
在所述帧长度和帧尾长度之和大于所述写入空间的情况下,判断所述环形缓冲队列没有有效帧数据。
根据本发明的另一个方面,还提供了一种数据的缓冲装置,该装置包括:
写入模块,用于获取写入数据,将所述写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列;
读取模块,用于获取读取指令,根据所述读取指令读取所述环形缓冲队列的有效帧数据。
在其中一个实施例,所述读取模块,用于在所述环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;根据所述帧头标志获取帧长度,帧尾指针偏移所述帧长度获取帧尾标志和校验码;判断所述帧尾标志是否正确和验证所述校验码是否通过;在所述判断正确和所述验证通过的情况下,判断所述帧数据为有效帧数据;在所述判断错误或者所述验证不通过的情况下,丢弃所述帧数据。
在其中一个实施例,所述写入模块,用于在所述写入数据的大小大于所述第一写入空间的情况下,将所述写入数据的第一部分数据写入所述第一写入空间,将所述写入数据的第二部分数据写入所述第二写入空间,所述写入空间包括所述第一写入空间和所述第二写入空间;
在所述第一写入空间或者所述第二写入空间的位置位于所述头数据的情况下,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列。
根据本发明的另一个方面,还提供了一种计算机,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现一种数据的缓冲方法的步骤。
根据本发明的另一个方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述一种数据的缓冲方法的步骤。
通过本发明,提供了一种数据的缓冲方法、装置、计算机和可读存储介质,该方法包括:获取写入数据,将该写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制该头数据到该单向队列的结尾组成该环形缓冲队列;获取读取指令,根据该读取指令读取该环形缓冲队列的有效帧数据,解决了数据流格式的数据缓冲分包粘包和处理效率低的问题,防止了数据缓冲分包粘包,提高了处理效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种数据的缓冲方法的流程图;
图2是根据本发明实施例的缓冲队列结构的示意图;
图3是根据本发明实施例的环形缓冲队列结构的示意图;
图4是根据本发明实施例的帧结构的示意图;
图5是根据本发明实施例的缓冲区间读写的示意图;
图6是根据本发明实施例的环形缓冲队列写入中r在w左边的示意图;
图7是根据本发明实施例的环形缓冲队列写入中r在w右边的示意图一;
图8是根据本发明实施例的环形缓冲队列写入中r在w右边的示意图二;
图9是根据本发明实施例的环形缓冲队列读取中r在w左边的示意图;
图10是根据本发明实施例的环形缓冲队列读取中r在w右边的示意图;
图11是根据本发明实施例的一种数据的缓冲装置的结构框图;
图12为根据本发明实施例的一种计算机设备内部的结构图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本申请实施例中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明的实施例提供了一种数据的缓冲方法,图1是根据本发明实施例的一种数据的缓冲方法的流程图,如图1所示,该方法包括:
步骤s102,获取写入数据,将该写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制该头数据到该单向队列的结尾组成该环形缓冲队列,图2是根据本发明实施例的缓冲队列结构的示意图,图3是根据本发明实施例的环形缓冲队列结构的示意图,如图2和图3所示,头数据复制拷贝后添加到单向队列的结尾,对单向队列的头数据进行实时拷贝复制,这样保证了环形缓冲队列能够头尾相连,另外,在本实施例中,默认帧头的长度比帧尾大,对包括帧头的头数据进行实时拷贝复制,若帧尾的长度比帧头大,则拷贝的头数据的缓冲长度以帧尾作为标准,环形缓冲队列能够头尾相连大大优化了缓冲队列的工作效率,在数据写入时,只要缓冲空间足够,就可以不停的写入,不需要去解析数据,执行效率高。
步骤s104,获取读取指令,根据该读取指令读取该环形缓冲队列的有效帧数据,在数据读取的过程中,只要寻找有效帧数据,不需要考虑帧头帧尾被缓冲队列的头尾截断的问题,大大优化了有效数据帧的搜索速度。
通过上述步骤步骤s102至s104,通过头数据复制后添加到单向队列的结尾,实现了环形缓冲队列能够头尾相连,数据缓冲过程的读或者写操作均不需要考虑缓冲队列头尾无法区分的问题,解决了数据流格式的数据缓冲分包粘包和处理效率低的问题,防止了数据缓冲分包粘包,提高了处理效率。
在一个实施例,图4是根据本发明实施例的帧结构的示意图,如图4所示,在数据读取的过程中,在该环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;根据该帧头标志获取帧长度,帧尾指针偏移该帧长度获取帧尾标志和校验码;判断该帧尾标志是否正确和验证该校验码是否通过;在该判断正确和该验证通过的情况下,判断该帧数据为有效帧数据;在该判断错误或者该验证不通过的情况下,丢弃该帧数据,需要说明的是该帧长度必须小于缓冲区的长度,另外,校验码的方式可以是循环冗余校验(cyclicredundancycheck,简称为crc)的方式,可以是其他验证方式。
在一个实施例中,图5是根据本发明实施例的缓冲区间读写的示意图,如图5所示,环形缓冲队列要维护两个索引,分别为写入端(w)和读取端(r)。写入(push)的时候,先确保环形缓冲队列没满,然后把数据复制到w所对应的写入空间的元素,最后w指向下一个元素;读取(pop)的时候,先确保环形缓冲队列没空,然后返回r对应的元素,最后r指向下一个元素。其中,r代表消费者,一直在读取缓冲区中的缓冲内容,w代表生产者,一直在环形缓冲区中写入数据内容写,在本实施例中,无论是r还是w,只能从左到右的移动,除非移动到缓冲队列的结尾,重新从缓冲队列的头部开始移动。
在环形缓冲队列的写入过程中,图6是根据本发明实施例的环形缓冲队列写入中r在w左边的示意图,如图6所示,r在w的左边,该写入空间包括第一写入空间和第二写入空间,在该写入数据的大小大于该第一写入空间的情况下,将该写入数据的第一部分数据写入该第一写入空间,将该写入数据的第二部分数据写入该第二写入空间;在该第一写入空间或者该第二写入空间的位置位于该头数据的情况下,复制该头数据到该单向队列的结尾组成该环形缓冲队列。例如,可以写入的空间不足,无法完整地放入数据,也可以写入的空间a2可以完整放入全部数据,不需要跳转,也可以写入的空间a2只能放入数据的一部分,剩下的需要跳转放入空间a1,则前头数据长度的内容需要拷贝到头数据拷贝区。
在环形缓冲队列的写入过程中,图7是根据本发明实施例的环形缓冲队列写入中r在w右边的示意图一,如图7所示,r在w的右边,其中,可以写入的空间不足,无法完整地放入数据,也可以写入空间足够,图8是根据本发明实施例的环形缓冲队列写入中r在w右边的示意图二,如图8所示,w在头数据(帧头数据区)的情况下,需要将对应数据拷贝到的头数据拷贝区。也可以写入的空间足够,且w不在头数据(帧头数据)中,就可以不需要将头数据拷贝到的头数据拷贝区。
在环形缓冲队列的读取过程中,图9是根据本发明实施例的环形缓冲队列读取中r在w左边的示意图,如图9所示,r在w的左边,在该环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;根据该帧头标志获取帧长度,帧尾指针偏移该帧长度后获取帧尾长度;在该帧长度和帧尾长度之和大于该环形缓冲队列的情况下,丢弃该帧数据;在该帧长度和帧尾长度之和大于该写入空间的情况下,判断该环形缓冲队列没有有效帧数据。例如,从r开始搜索帧头信息(读取有效帧),若搜索到新的帧头,r则是新帧头的起始地址,若帧头的帧长度和帧尾长度大于缓冲队列的总长度,丢弃此帧头,从r 1的位置重新开始搜索新的帧头。若搜索到新的帧头,r则是新帧头的起始地址,若偏移帧头的帧数据长度后,对应的不是帧尾地址,则丢弃此帧头,从r 1的位置重新开始搜索新的帧头。其中,若从r开始搜索到w都没有任何帧头信息,则r=w,说明环形缓冲队列中已经没有有效数据帧了。若搜索到新的帧头,若帧头的帧长度和帧尾长度大于可以读写的空间长度,则没有一个有效完整的帧。在根据r的帧头信息,取出完整的一帧有效帧数据的情况下,继续读取下一个新的一帧。
在环形缓冲队列的读取过程中,图10是根据本发明实施例的环形缓冲队列读取中r在w右边的示意图,如图10所示,r在w的右边,在该环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;根据该帧头标志获取帧长度,帧尾指针偏移该帧长度后获取帧尾长度;在该帧长度和帧尾长度之和大于该环形缓冲队列的情况下,丢弃该帧数据;在该帧长度和帧尾长度之和大于该写入空间的情况下,判断该环形缓冲队列没有有效帧数据。在该有效帧数据的帧头被该环形缓冲队列截断的情况下,复制该帧头被截断的数据到该单向队列的结尾组成该环形缓冲队列,例如,从r开始搜索帧头信息(读取有效帧帧),若新的帧头结构被环形缓冲队列的尾和头截断时,则通过头数据拷贝缓冲来补全帧头信息,用来判断帧信息。若搜索到新的帧头,r则是新帧头的起始地址,若帧头的帧长度和帧尾长度大于缓冲队列的总长度,丢弃此帧头,从r 1的位置重新开始搜索新的帧头,在搜索的过程中,搜索到结尾时自动跳转到帧头。若搜索到新的帧头,r则是新帧头的实际地址,若偏移帧头的帧长度后,对应的不是帧尾地址,则丢弃此帧头,从r 1的位置重新开始搜索新的帧头,在搜索的过程中,搜索到结尾时自动跳转到帧头,若从r开始搜索到w都没有发现任何帧头信息,则r=w,说明缓冲队列中已经没有有效数据帧了,若搜索到新的帧头,若帧头的帧数据长度和帧尾长度大于可以读写的空间长度,则没有一个有效完整的帧。根据r的帧头情况,取出完整的一帧,取出完整的一帧有效帧数据的情况下,继续读取下一个新的一帧。
应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
关于数据的缓冲装置的具体限定可以参见上文中对于数据的缓冲方法的限定,在此不再赘述。上述数据的缓冲装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在本实施例中,提供了一种数据的缓冲装置,图11根据本发明实施例的一种数据的缓冲装置的结构框图,如图11所示,该装置包括:
写入模块1102,用于获取写入数据,将该写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制该头数据到该单向队列的结尾组成该环形缓冲队列;
读取模块1104,用于获取读取指令,根据该读取指令读取该环形缓冲队列的有效帧数据。
通过上述装置,通过头数据复制后添加到单向队列的结尾,实现了环形缓冲队列能够头尾相连,数据缓冲过程的写入模块1102或者读取模块1104操作均不需要考虑缓冲队列头尾无法区分的问题,解决了数据流格式的数据缓冲分包粘包和处理效率低的问题,防止了数据缓冲分包粘包,提高了处理效率。
在其中一个实施例,该读取模块1104,用于在该环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;根据该帧头标志获取帧长度,帧尾指针偏移该帧长度获取帧尾标志和校验码;判断该帧尾标志是否正确和验证该校验码是否通过;在该判断正确和该验证通过的情况下,判断该帧数据为有效帧数据;在该判断错误或者该验证不通过的情况下,丢弃该帧数据。
在其中一个实施例,该写入模块1102,用于在该写入数据的大小大于该第一写入空间的情况下,将该写入数据的第一部分数据写入该第一写入空间,将该写入数据的第二部分数据写入该第二写入空间;
在该第一写入空间或者该第二写入空间的位置位于该头数据的情况下,复制该头数据到该单向队列的结尾组成该环形缓冲队列。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,图12为根据本发明实施例的一种计算机设备内部的结构图,如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据的缓冲方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各实施例提供的一种数据的缓冲方法中的步骤,该步骤包括:获取写入数据,将该写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制该头数据到该单向队列的结尾组成该环形缓冲队列;获取读取指令,根据该读取指令读取该环形缓冲队列的有效帧数据,通过头数据复制后添加到单向队列的结尾,实现了环形缓冲队列能够头尾相连,数据缓冲过程的读或者写操作均不需要考虑缓冲队列头尾无法区分的问题,解决了数据流格式的数据缓冲分包粘包和处理效率低的问题,防止了数据缓冲分包粘包,提高了处理效率。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各实施例提供的一种数据的缓冲方法中的步骤,步骤包括:获取写入数据,将该写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制该头数据到该单向队列的结尾组成该环形缓冲队列;获取读取指令,根据该读取指令读取该环形缓冲队列的有效帧数据,解决了数据流格式的数据缓冲分包粘包和处理效率低的问题,防止了数据缓冲分包粘包,提高了处理效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上该实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
1.一种数据的缓冲方法,其特征在于,该方法包括:
获取写入数据,将所述写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列;
获取读取指令,根据所述读取指令读取所述环形缓冲队列的有效帧数据。
2.根据权利要求1所述方法,其特征在于,所述根据所述读取指令读取所述环形缓冲队列的有效帧数据包括:
在所述环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;
根据所述帧头标志获取帧长度,帧尾指针偏移所述帧长度获取帧尾标志和校验码;
判断所述帧尾标志是否正确和验证所述校验码是否通过;
在所述判断正确和所述验证通过的情况下,判断所述帧数据为有效帧数据;
在所述判断错误或者所述验证不通过的情况下,丢弃所述帧数据。
3.根据权利要求1所述方法,其特征在于,所述写入空间包括第一写入空间和第二写入空间,将所述写入数据写入环形缓冲队列的写入空间包括:
在所述写入数据的大小大于所述第一写入空间的情况下,将所述写入数据的第一部分数据写入所述第一写入空间,将所述写入数据的第二部分数据写入所述第二写入空间;
在所述第一写入空间或者所述第二写入空间的位置位于所述头数据的情况下,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列。
4.根据权利要求1所述方法,其特征在于,所述根据所述读取指令读取所述环形缓冲队列的有效帧数据包括:
在所述有效帧数据的帧头被所述环形缓冲队列截断的情况下,复制所述帧头被截断的数据到所述单向队列的结尾组成所述环形缓冲队列。
5.根据权利要求1所述方法,其特征在于,所述根据所述读取指令读取所述环形缓冲队列的有效帧数据包括:
在所述环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;
根据所述帧头标志获取帧长度,帧尾指针偏移所述帧长度后获取帧尾长度;在所述帧长度和帧尾长度之和大于所述环形缓冲队列的情况下,丢弃所述帧数据;
在所述帧长度和帧尾长度之和大于所述写入空间的情况下,判断所述环形缓冲队列没有有效帧数据。
6.一种数据的缓冲装置,其特征在于,该装置包括:
写入模块,用于获取写入数据,将所述写入数据写入环形缓冲队列的写入空间,其中,获取单向队列的头数据,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列;
读取模块,用于获取读取指令,根据所述读取指令读取所述环形缓冲队列的有效帧数据。
7.根据权利要求6所述装置,其特征在于,所述读取模块,用于在所述环形缓冲队列中,通过帧头指针搜寻帧数据的帧头标志;根据所述帧头标志获取帧长度,帧尾指针偏移所述帧长度获取帧尾标志和校验码;判断所述帧尾标志是否正确和验证所述校验码是否通过;在所述判断正确和所述验证通过的情况下,判断所述帧数据为有效帧数据;在所述判断错误或者所述验证不通过的情况下,丢弃所述帧数据。
8.根据权利要求6所述装置,其特征在于,所述写入模块,用于在所述写入数据的大小大于第一写入空间的情况下,将所述写入数据的第一部分数据写入所述第一写入空间,将所述写入数据的第二部分数据写入第二写入空间,其中,所述写入空间包括所述第一写入空间和所述第二写入空间;
在所述第一写入空间或者所述第二写入空间的位置位于所述头数据的情况下,复制所述头数据到所述单向队列的结尾组成所述环形缓冲队列。
9.一种计算机,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
技术总结