本发明专利技术公开了一种缓冲区循环读写方法,该方法包括:向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记;从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。本发明专利技术还公开了一种缓冲区循环读写装置,该方法和装置能够在保证读数据的操作简便的同时,提高读数据的速度。
【技术实现步骤摘要】
本专利技术涉及存储
,特别涉及一种缓冲区循环读写方法及装置。
技术介绍
目前,在使用缓冲区做数据读写时,一般都会用一定的方式,实现缓冲区的循环读写。具体步骤如下先为程序分配一块固定大小的内存,例如用pBufferBeginPtr来标志该块内存的起始地址,然后定义两个指针对象m_pReadPtr和pfeitePtr ;m_pReadPtr用来标志缓冲区读数据的位置,m_pffritePtr用来标志和缓冲区写的位置。写数据时,先将数据组合成分隔符+数据长度+数据的格式,例如用PData标志组合后的数据(PData的数据长度为nDataLen),然后判断缓冲区剩余空间是否能够存放 PData数据,若不够,则丢弃该块数据,或采用等待的方式,等有空间后再将该段PData数据拷贝至缓冲区;若空间足够,则直接将PData从m_pfeitePtr位置开始拷贝,同时将m_ PfeitePtr的位置向后移动个单位。在遇到缓冲区末端空间不够时(假设此时缓冲区末端剩余的空间单位为nLeftLen),现有的循环读写方法一般有两种处理方式写方式1 先将部分数据拷贝至缓冲区末端(此时将剩余nDataLen-nLeftLen的数据),然后将剩余部分从缓冲区起始位置开始拷贝,同时将m_pfeitePtr的位置移动pBuf ferBeginPtr+ (nDataLen-nLeftLen)白勺位置;写方式2 将数据直接从缓冲区开始位置拷贝,将末端这些空间浪费掉,同时将m_ pffritePtr 的位置移动 pBufferBeginPtr+nDataLen 的位置。读数据时,先判断缓冲区是否有可读数据,若无,则直接返回;若存在可读数据,则先从m_pReadPtr开始,通过分隔符搜索有效数据的位置,找到后,计算出需要读取的数据长度,例如用aDataLen表示,然后再根据数据长度读取剩余的数据。针对上述两种写数据方式,在读数据时,分别采用如下方式若采用写方式1,那么在计算aDataLen时,需要先判断数据是如何存放的,如果数据的一部分字节存放在缓冲区末端,一部分字节存放在缓冲区起始位置,那么计算 aDataLen时需要先将这两部分字节组合起来,然后根据组合后的字节计算长度,这种方式在计算aDataLen时比较繁琐,不够简便。若采用写方式2,那么当读到缓冲区末端时,由于存在一些无效数据,在搜索有效数据时,要将末端整个无效数据搜索一遍,才会从缓冲区开始位置搜索,这个过程会浪费掉一部分搜索时间,降低了数据读取的速度。
技术实现思路
本专利技术实施例提供一种缓冲区循环读写方法,能够在保证读数据的操作简便的同时,提高读数据的速度。本专利技术实施例提供一种缓冲区循环读写装置,能够在保证读数据的操作简便的同时,提高读数据的速度。为达到上述目的,本专利技术的技术方案具体是这样实现的一种缓冲区循环读写方法,该方法包括向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记;从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。较佳地,所述在缓冲区上一个数据的末尾处进行标记,包括令无效地址指针等于当前写地址指针,以所述无效地址指针为标记。较佳地,所述若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,包括判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置。较佳地,所述通过搜索分隔符搜索有效数据位置,包括分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针 +3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。较佳地,所述后续读取数据操作包括若没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程。一种缓冲区循环读写装置,该装置包括缓冲区,缓存数据;写模块,与所述缓冲区相连,在向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记;读模块,与所述缓冲区相连,在从缓冲区读数据时,若读地址指针指向所述标记, 则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。较佳地,所述写模块包括写入单元,在向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,标记单元,与所述写入单元相连,令无效地址指针等于当前写地址指针,以所述无效地址指针为标记。较佳地,所述读模块包括指令单元,判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;搜索单元,与所述指令单元相连,根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置。较佳地,所述搜索单元分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。较佳地,所述读模块进一步包括处理单元,与所诉搜索单元相连,若所述搜索单元没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程。由上述的技术方案可见,本专利技术的这种缓冲区循环读写方法和装置,在现有缓冲区读写方法2的基础上,添加一个用于标志缓冲区尾端无效位置的变量,使读数据过程中, 搜索有效数据时可以跳过无效数据区域,直接从缓冲区开始部分搜索,从而减少了搜索时间,而且利用现有写方法2保证了数据长度计算的简单特性,从而达到在保证读数据的操作简便的同时,提高读数据速度的目的。附图说明图1为本专利技术实施例的缓冲区循环读写原理示意图;图2为本专利技术实施例的缓冲区写数据流程图;图3为本专利技术实施例的缓冲区读数据流程图;图4为本专利技术实施例的缓冲区循环读写装置结构示意图;图5为本专利技术实施例的写模块结构示意图;图6为本专利技术实施例的读模块结构示意图;图7为本专利技术实施例的缓冲区循环读写方法基本流程图。具体实施例方式为使本专利技术的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本专利技术进一步详细说明。本专利技术主要是在现有缓冲区读写方法2的基础上,添加一个用于标志缓冲区尾端无效位置的变量,使读数据过程中,搜索有效数据时可以跳过无效数据区域,直接从缓冲区开始部分搜索,从而减少了搜索时间,而且现有写方法2保证了数据长度计算的简单特性, 从而达到在保证读数据的操作简便的同时,提高读数据速度的目的。下面将分别以缓冲区的写数据过程和读数据过程详细说明本专利技术实施例的缓冲区读写方法。本专利技术的缓冲区循环读写方法的基本的流程如图本文档来自技高网...
【技术保护点】
1.一种缓冲区循环读写方法,其特征在于,该方法包括:向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记;从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。
【技术特征摘要】
【专利技术属性】
技术研发人员:邓世华,
申请(专利权)人:杭州海康威视系统技术有限公司,
类型:发明
国别省市:86
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。