一种队列处理方法及装置的制作方法

文档序号:6444211阅读:220来源:国知局
专利名称:一种队列处理方法及装置的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种队列处理方法及装置。
背景技术
利用传统数据结构对顺序数据进行生产和消费时,一般采用队列对先进先出的数据进行处理。队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在最初队列的基础之上,又逐步发展出环形队列、双向队列、环形双向队列,这些队列都能很好地对先进先出的数据进行处理。发明人通过对现有技术的研究发现,现有的队列数据结构虽然能解决大多数先进先出的数据处理问题,但是,在利用现有的队列进行数据处理时处理前后的对象必须一致,以数据的存取过程为例,如果存入的是两个短整数,最后取出时也只能分两次进行,每次取出一个短整数,而不能根据实际情况进行调整,譬如一次性取出一个长整数,从而使得现有技术的灵活性和适应性较差。

发明内容
有鉴于此,本发明实施例的目的在于提供一种队列处理方法及装置,实现在利用队列处理数据时能够根据实际情况灵活调整处理对象的类型。为实现上述目的,本发明实施例提供了如下技术方案:—种队列处理方法,包括:确定操作类型以及待处理数据类型;根据所述待处理数据类型确定待处理数据的字节数;根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理。当所述操作类型为将待处理数据存入队列时,根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理包括:确定当前队列的空余的字节数;根据当前队列的空余的字节数和待处理数据的字节数判断当前操作是否会发生溢出;如果不会发生溢出,则将待处理数据按字节写入所述队列;否则,在按删除指示删除历史数据后,将待处理数据按字节写入所述队列,所述删除指示根据当前队列的空余的字节数和待处理数据的字节数确定删除的历史数据的字节数。所述将待处理数据按字节写入所述队列具体为:根据当前队尾指针将待处理数据按字节写入所述队列;将队尾指针指向新的队尾。当所述操作类型为从队列中取出数据时,根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理包括:确定所述队列现有的字节总数;在根据所述现有的字节总数和待处理数据的字节数确定当前队列中有足够的数据以供取出时,按字节从当前队列中取出数据。所述按字节从当前队列中取出数据具体为:根据当前队首指针按字节从当前队列中取出数据;将队首指针指向新的队首。当所述操作类型为从队列中复制数据时,根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理包括:确定所述队列现有的字节总数;在根据所述现有的字节总数和待处理数据的字节数确定当前队列中有足够的待复制的数据时,按字节复制待复制的数据。一种队列处理装置,包括:确定单元,用于确定操作类型以及待处理数据类型,并根据所述待处理数据类型确定待处理数据的字节数;处理单元,用于根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理。所述处理单元包括:第一处理子单元,用于根据待处理数据的字节数按字节将待处理数据存入队列;和/或第二处理子单元,用于根据待处理数据的字节数从队列中按字节取出数据;和/或第三处理子单元,用于根据待处理数据的字节数从队列中按字节复制数据。所述第一处理子单元包括:判断模块,用于根据当前队列的空余的字节数和待处理数据的字节数判断当前操作是否会发生溢出;写入模块,用于在所述判断模块确定不会发生溢出时将待处理数据按字节写入所述队列;删除模块,用于在所述判断模块确定当前操作会发生溢出时根据删除指示删除历史数据,所述删除指示根据当前队列的空余的字节数和待处理数据的字节数确定删除的历史数据的字节数;所述写入模块,还用于在所述删除模块删除历史数据后,待处理数据按字节写入所述队列。所述第二处理子单元包括:确定模块,用于根据当前队列的空余的字节数和待处理数据的字节数确定当前队列中是否有足够的数据以供取出;取出模块,用于在确定模块确定当前队列中有足够的数据以供取出时,按字节从当前队列中取出数据。所述第三处理子单元包括:
确定模块,用于根据当前队列的空余的字节数和待处理数据的字节数确定当前队列中有足够的待复制的数据;复制模块,用于在所述确定模块确定当前队列中有足够的待复制的数据时,按字节复制待复制的数据。可见,在本发明实施例中,确定操作类型、队列信息以及待处理数据的字节数;根据所述操作类型和队列信息按字节对所述待处理数据进行处理。本发明实施例所提供的方法对被操作数据的类型没有限制,无论对队列进行何种操作都是按字节进行的,抛开了现有技术队列处理过程中数据类型的概念,将所有的数据类型统一到字节上,使得用户可以根据实际需要灵活地确定待处理数据,为用户带来了极大的便利。


图1为本发明一实施例所提供的方法的流程图;图2为本发明一实施例所提供的队列处理前后的结构示意图;图3为本发明另一实施例所提供的方法的流程图;图4为本发明一实施例所提供的方法的流程图;图5为本发明又一实施例所提供的方法的流程图;图6为本发明一实施例所提供的装置的结构示意图;图7为本发明一实施例所提供的装置中一单元的结构示意图;图8为本发明一实施例所提供的装置中另一单元的结构示意图;图9为本发明一实施例所提供的装置中又一单元的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案、及优点更加清楚明白,以下参照附图对本发明实施例提供的技术方案进行详细说明。本发明实施例所提供的队列处理方法包括:确定操作类型以及待处理数据类型;根据所述待处理数据类型确定待处理数据的字节数;根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理。所述的操作类型包括:将数据存储到队列、从队列中取出数据、从队列中复制数据或者将数据从队列中删除。下面结合具体的实施例进行详细说明。参见图1,本发明实施例提供了一种数据存储方法,该方法包括如下步骤:步骤101:接收待处理数据。所述待处理数据即待存储到队列中的数据。该数据可以是短整型、整型、长整型、浮点型、字符型、数组等各种类型;也可以是由其中两个或者两个以上的类型的数据组合而成的类对象数据。例如,在一次存储过程中可以存入一个由两个整型数据和一个浮点型数据组合而成的数据。步骤102:计算接收到的数据的字节数。
因为本发明实施例所提供的方法可以对各种类型的数据或者由不同类型数据组合而成的数据进行处理,所以每次接收的到的数据都是不确定的,当接收到待处理数据后,为了后续处理能够顺利进行,需要根据接收到的待处理数据的类型确定接收到的数据的字节数。无论是整型、浮点型,或者是其他类型的数据,都是由字节组成的。各种类型的数据与字节之间的关系为:短整型占用两个字节;整型占用四个字节;长整型占用八个字节;浮点型占用四个字节;双精度浮点型占用八个字节;逻辑型占用两个字节;英文字母占用一个字节;中文字母占用两个字节。当确定了待处理数据后,根据待处理数据的类型确定待处理数据所占用的字节数。例如,若当前接收的是由两个整型数据和一个浮点型数据组合而成的数据,那么该数据占用的字节数为八个字节加上四个字节共十二个字节。步骤103:计算队列中空闲空间的字节数。因为本发明实施例所提供的方法是将待存储数据存入当前队列,所以必须确定当前队列中是否有足够的空闲空间来存放数据,故在确定待存储数据的字节之后,计算队列空闲空间的字节数。步骤104:判断队列空闲空间是否能够存放步骤101中接收到的待存储数据,如果能够存储,则进入步骤105 ;否则,进入步骤106。通过比较待存储数据的字节数和队列剩余空闲空间的字节数判断队列的空闲空间是否足够用来存放待存储数据。步骤105:按字节将待存储数据存入队列,并修正队尾指针。此时已经确定队列的剩余空闲空间足够用来存放待存储数据,所以直接按字节将待存储数据存入队列即可。队列的操作中,只允许在队列的前端(front)进行删除操作,在队列的后端(rear)进行插入操作,所以存入数据实际上就是按字节将待存储数据插入队列的后端,当所有的待存储数据都插入完成后,将队尾指针进行修正,即将原队尾指针指向新的队尾。步骤106:判断是否丢弃队首的数据,如果丢弃,则进入步骤107,如果不丢弄,则进入步骤108。步骤107:丢弃队首的数据,修正队首指针,进入步骤105。当队列剩余空闲空间不够用来存放待处理数据时,可以通过删除部分历史数据来为待存储数据挪出部分存储空间。具体删除的历史数据可以根据待存储的字节数和原来剩余空闲字节数来确定。例如,待存储数据为8个字节,当前队列剩余5个字节的空间,那么删除3个字节的历史数据即可。队列的操作中,只允许在队列的前端(front)进行删除操作,在队列的后端(rear)进行插入操作,所以在删除队首的3个字节的历史数据后,要同时修正队首指针。步骤108:根据什么判断?判断是否丢弃部分待存储数据,如果丢弃,则进入步骤109 ;否则,进入步骤110。步骤109:丢弃部分待存储数据,丢弃多少?进入步骤105。流程图中缺少步骤110:返回无法存储数据报告。如果历史数据比较重要,不能删除历史数据时,通过步骤108判断是否删除部分待存储数据,让存储可以继续进行。仍然以当前的待存储数据为一个由两个整型和一个浮点型数据组成的数据为例,此时,假设可以通过删除三个字节的待处理数据避免溢出的产生;因为已经知道待处理数据的类型(两个整型和一个浮点型),删除三个字节的待处理数据后,无论是删除三个字节的整型数据还是删除三个字节的浮点型数据,剩下一个字节所对应的数据也不完整了,所以可以直接删除一个完整的数据(如一个整型或者一个浮点型共四个字节),留下两个完整的数据(八个字节)作为新的待处理数据。但是如果历史数据和待存储数据都非常重要,都不可以删除的话,则通过步骤110报告发生异常。图2以环形队列为例,显示了将一个5字节的数据存入队列的过程,该5字节的数据可以是一个整型与一个字符型的组合,也可以是两个中文汉字与一个中文字母的组合?,本发明对数据具体内容不限定。从图2中分别用a和b表示将5个字节的新数据(用Y表示)存入队列m的过程。从图2的a图中可以看到,队列m共包含8个字节,分别标上I 8以示区别,其中标号为I 4的四个字节中已经存储了内容,用X表示。队首指针front指向标号1,队尾指针rear指向标号4。现需要将5个字节的内容存入队列m,通过比较待存储的字节数(5个字节)和队列m剩余的字节数(4个字节),发现队列m的剩余空间不够存放待存储数据,根据图1所示的实施例所提供的存储方法,选择通过删除队列m中的一个历史字节对待存储数据进行保存。当删除一个历史字节后,队列m的队首指示由队列m中标号为I的位置移动到标号为2的位置,然后从标号为5的位置开始插入5个字节的新数据,用Y表示,最后一个新数据被插入到标号为I的位置上,相应的队尾指针也由插入新数据前指向标号为4的位置改为指向标号为I的位置。以上为本发明实施例提供的一种数据存储方法,以下本发明一实施例还提供了一种数据读取方法。图3为本发明实施例提供的数据读取方法的流程图,该方法包括:步骤301:获得待读取的数据的字节数。所述待读取的数据可以任意类型的数据或者不同类型数据的组合。所以待读取数据可以是一个字节或者任意数量的字节数。根据待读取数据的类型确定待读取数据的字节数。例如如果之前存入了一个整型,可以一次读取四个字节,也可以一次只读取一个字节,分四次读取;或者一次读取一个字节、一次读取三个字节等。具体的读取方式可以根据实际网络状态进行确定。假设在本实施例中待读取数据为两个字节。步骤302:获得队列中缓存的数据的字节数。步骤303:判断队列中是否有足够的数据,如果有,则进入步骤304 ;否则,结束该流程。根据待读取数据的字节数和队列中缓存的字节数来判断队列中是否有足够的数据以供读取。步骤304:按字节读取队列中的数据,并修正队首指针。队列的操作中,只允许在队列的前端(front)进行删除操作,在队列的后端(rear)进行插入操作。而读取操作的实质为将数据从队列中取出保存,所以按字节依次从队列的队首取出两个字节的数据,然后将队首指针向后移两个字节。结合图1和图2所示的两个实施例可以知道,如果要向队列中存入一个整型(4个字节),通过本发明实施例所提供的方法,可以一次存入,分多次读取;也可以分多次存入,一次读取。当然也可以分多次存入、多次读取。只要是按照字节进行即可,此外,本发明实施例当然也支持存入多个多种类型的数据,例如存入一个整型、一个浮点型和一个短整型共10个字节的数据,读取的时候可以分别读取;或者分别分批次存入这10个字节的数据,然后一次读取。队列的特点是先进先出,因此按一定顺序存入后,不论是一次性取出还是多次取出,因为数据保存的顺序没有改变,所取出的数据也不会发生变化。很显然本发明实施例所提供的队列处理方法使得数据处理方式更加灵活多变,不再如现有技术中,受到数据类型的限制,如存入一个整型,读取时也必须是一个整型等,使得用户处理数据是的灵活性大大提高,极大地提升了用户体验。本发明一实施例还提供了一种数据复制方法,请参见图4,该方法包括:步骤401:获得待复制的数据字节数;与前面类似,待复制的数据可以是任何类型或者不同类型数据的组合。根据待复制数据的类型确定待复制的数据的总字节数。步骤402:获得队列存储的数据的字节数;步骤403:判断队列中是否有足够的数据,如果有,则进入步骤404 ;否则,结束该流程;步骤404:按字节复制队列中的数据。如前所述,本发明实施例所提供的方法在存储数据时,在有可能发生溢出时可以通过删除部分历史数据或者待存储数据来实现存储,这样不免造成某些数据的不完整,所以为了保证在读取数据时读取的是有效的信息,可以通过复制部分待读取的数据进行检查。若通过检测发现队列中的数据确实为待读取的数据那么可以直接进行读取,否则就不必再进行读取操作了。本发明另一实施例还提供了一种丢弃数据的方法,请参见图5,该方法包括:步骤501:获得待丢弃数据的字节数;与前面类似,待丢弃的数据可以是任何类型或者不同类型数据的的组合。根据待丢弃数据的类型确定待丢弃的数据的总字节数。步骤502:获得队列中缓存的数据的字节数;步骤503:判断是否有足够的数据,如果是,则进入步骤504 ;否则,结束该流程;步骤504:修正队首指针。如上述实施例所提的复制数据的方法,当发现队列中的数据残缺无用时,可以对残缺无用的数据进行丢弃,队列的操作中,只允许在队列的前端(front)进行删除操作,在队列的后端(rear)进行插入操作。所述丢弃数据操作实质上即为将队首指针指向新的队首。本发明实施例提供了一种灵活的队列处理方法,它的灵活性主要体现在对被操作数据的类型没有限制,无论对队列进行何种类型的操作都是按字节进行的,抛开了现有技术队列处理过程中数据类型的概念,将所有的数据类型统一到字节的基础上,从而使得数据处理方法极为灵活,为用户带来了极大的便利。与方法实施例相对应,本发明实施例还提供一种队列处理装置,参见图6,该装置包括:
确定单元601,用于确定操作类型以及待处理数据类型,并根据所述待处理数据类型确定待处理数据的字节数;处理单元602,用于根据所述队列信息按字节对所述待处理数据进行处理。其中,所述处理单元包括:第一处理子单元,用于根据待处理数据的字节数按字节将待处理数据存入队列;和/或第二处理子单元,用于根据待处理数据的字节数从队列中按字节取出数据;和/或第三处理子单元,用于根据待处理数据的字节数从队列中按字节复制数据。参见图7,所述第一处理子单元包括:判断模块701,用于根据当前队列的空余的字节数和待处理数据的字节数判断当前操作是否会发生溢出;写入模块702,用于在所述判断模块确定不会发生溢出时将待处理数据按字节写入所述队列;删除模块703,用于在所述判断模块确定当前操作会发生溢出时根据删除指示删除历史数据,所述删除指示根据当前队列的空余的字节数和待处理数据的字节数确定删除的历史数据的字节数;所述写入模块702,还用于在所述删除模块删除历史数据后,待处理数据按字节写入所述队列。参见图8,所述第二处理子单元包括:确定模块801,用于根据当前队列的空余的字节数和待处理数据的字节数确定当前队列中是否有足够的数据以供取出;取出模块802,用于在确定模块确定当前队列中有足够的数据以供取出时,按字节从当前队列中取出数据。参见图9,所述第三处理子单元包括:确定模块901,用于根据当前队列的空余的字节数和待处理数据的字节数确定当前队列中有足够的待复制的数据;复制模块902,用于在所述确定模块确定当前队列中有足够的待复制的数据时,按字节复制待复制的数据。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种队列处理方法,其特征在于,包括: 确定操作类型以及待处理数据类型; 根据所述待处理数据类型确定待处理数据的字节数; 根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理; 所述操作类型包括将数据存储到队列、从队列中取出数据、从队列中复制数据或者将数据从队列中删除。
2.根据权利要求1所述的方法,其特征在于,当所述操作类型为将待处理数据存入队列时,根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理包括: 确定当前队列的空余的字节数; 根据当前队列的空余的字节数和待处理数据的字节数判断当前操作是否会发生溢出; 如果不会发生溢出,则将待处理数据按字节写入所述队列; 否则,在按删除指示删除历史数据后,将待处理数据按字节写入所述队列,所述删除指示根据当前队列的空余的字节数和待处理数据的字节数确定删除的历史数据的字节数。
3.根据权利要求2所述的方法,其特征在于,所述将待处理数据按字节写入所述队列具体为: 根据当前队尾指针将待处理数据按字节写入所述队列; 将队尾指针指向新的队尾。
4.根据权利要求1所述的方法,其特征在于,当所述操作类型为从队列中取出数据时,根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理包括: 确定所述队列现有的字节总数; 在根据所述现有的字节总数和待处理数据的字节数确定当前队列中有足够的数据以供取出时,按字节从当前队列中取出数据。
5.根据权利要求4所述的方法,其特征在于,所述按字节从当前队列中取出数据具体为: 根据当前队首指针按字节从当前队列中取出数据; 将队首指针指向新的队首。
6.根据权利要求1所述的方法,其特征在于,当所述操作类型为从队列中复制数据时,根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理包括: 确定所述队列现有的字节总数; 在根据所述现有的字节总数和待处理数据的字节数确定当前队列中有足够的待复制的数据时,按字节复制待复制的数据。
7.一种队列处理装置,其特征在于,包括: 确定单元,用于确定操作类型以及待处理数据类型,并根据所述待处理数据类型确定待处理数据的字节数; 处理单元,用于根据所述操作类型和待处理数据的字节数按字节对所述待处理数据进行处理。
8.根据权利要求7所述的装置,其特征在于,所述处理单元包括: 第一处理子单元,用于根据待处理数据的字节数按字节将待处理数据存入队列;和/或第二处理子单元,用于根据待处理数据的字节数从队列中按字节取出数据; 和/或第三处理子单元,用于根据待处理数据的字节数从队列中按字节复制数据。
9.根据权利要求8所述的装置,其特征在于,所述第一处理子单元包括: 判断模块,用于根据当前队列的空余的字节数和待处理数据的字节数判断当前操作是否会发生溢出; 写入模块,用于在所述判断模块确定不会发生溢出时将待处理数据按字节写入所述队列; 删除模块,用于在所述判断模块确定当前操作会发生溢出时根据删除指示删除历史数据,所述删除指示根据当前队列的空余的字节数和待处理数据的字节数确定删除的历史数据的字节数; 所述写入模块,还用于在所述删除模块删除历史数据后,待处理数据按字节写入所述队列。
10.根据权利要求8所述的装置,其特征在于,所述第二处理子单元包括: 确定模块,用于根据当前队列的空余的字节数和待处理数据的字节数确定当前队列中是否有足够的数据以供取出; 取出模块,用于在确定模块确定当前队列中有足够的数据以供取出时,按字节从当前队列中取出数据。
11.根据权利要求8所述的装置,其特征在于,所述第三处理子单元包括: 确定模块,用于根据当前队列的空余的字节数和待处理数据的字节数确定当前队列中有足够的待复制的数据; 复制模块,用于在所述确定模块确定当前队列中有足够的待复制的数据时,按字节复制待复制的数据。
全文摘要
本发明实施例公开了一种队列处理方法和装置,其中,所述方法包括确定操作类型、队列信息以及待处理数据的字节数;根据所述操作类型和队列信息按字节对所述待处理数据进行处理;所述操作类型包括将数据存储到队列、从队列中取出数据、从队列中复制数据或者将数据从队列中删除。本发明实施例所提供的方法对被操作数据的类型没有限制,无论对队列进行何种操作都是按字节进行的,抛开了现有技术队列处理过程中数据类型的概念,将所有的数据类型统一到字节上,使得用户可以根据实际需要灵活地确定待处理数据,为用户带来了极大的便利。
文档编号G06F17/30GK103186585SQ201110451969
公开日2013年7月3日 申请日期2011年12月29日 优先权日2011年12月29日
发明者张海洲 申请人:北京亿阳信通科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1