一种数据结构传输方法

文档序号:6561688阅读:173来源:国知局
专利名称:一种数据结构传输方法
技术领域
本发明涉及网络通讯技术领域,具体涉及一种数据结构传输方法。
背景技术
在操作系统提供的功能中,消息是一种非常重要的跨进程通信手段,在Windows操作系统中,窗口加消息循环是最基本的编程架构;在一般的GUI(Graphical User Interface,图形用户接口)中,消息循环也是通用的程序架构。
目前,消息处理流程包括如下步骤步骤A、用户进程或线程构造消息,并选择接收进程。
步骤B、通过系统调用,操作系统获取消息,并将消息放入到接收进程的消息队列中。
步骤C、接收进程监测消息队列,等待消息。
步骤D、接收进程获取消息,并处理消息。
由于消息中的数据只能是纯粹的数值,因此,目前利用消息在进程间传递数据结构时,发送进程模块和接收进程之间需要预先约定数据结构转换为非数据结构描述数值的规则,然后,发送进程模块根据预先约定的规则将整个数据结构转换为非数据结构描述数值,并通过消息传输该非数据结构描述数值。接收进程需要根据预先约定的规则将非数据结构描述数值恢复为完整的数据结构。
上述在进程间传送数据结构的方法需要预先约定规则,使该方法的适用范围受到限制、通用性差;而且,现有的数据结构传送方法中,数据结构转换和消息发送是分开进行,从而导致数据结构的传输效率低。

发明内容
本发明的目的在于,提供一种数据结构传输方法,使数据结构能够进行方便、高效的传输。
为达到上述目的,本发明提供的一种数据结构传输方法,包括步骤a、发送任务模块将数据结构的关联信息转换为与数据结构中的数据存放位置相关的偏移量信息;b、发送任务模块将所述偏移量信息和数据结构中的数据传输至接收任务模块;c、接收任务模块将所述偏移量信息转换为关联信息,并根据该关联信息、数据结构中的数据恢复数据结构。
所述步骤b具体包括发送任务模块将数据结构中的数据存储在共享内存/文件/系统消息队列中,并将与所述数据存储位置相关的偏移量信息、数据结构类型信息和数据通过基于共享内存/文件/系统消息队列的消息发送至接收任务模块。
所述步骤b中,数据结构中的数据连续存储在共享内存/系统消息队列中。
所述步骤b中数据存储在共享内存/系统消息队列中时,所述步骤c包括接收任务模块根据所述偏移量信息、数据结构类型信息将共享内存/系统消息队列中的数据复制到接收任务模块内存中,并将所述偏移量信息转换为关联信息,接收任务模块根据该关联信息、数据结构类型信息及接收任务模块内存中的数据恢复数据结构;或接收任务模块根据所述偏移量信息、数据结构类型信息锁定共享内存/系统消息队列中的数据结构,并将所述偏移量信息转换为关联信息,接收任务模块根据该关联信息、数据结构类型信息及共享内存/系统消息队列中的数据恢复数据结构。
所述步骤b具体包括发送任务模块将数据结构中的数据携带于网络套接字中,并将与数据在网络套接字中的位置相关的偏移量信息,数据结构类型信息和数据通过网络套接字发送至接收任务模块。
所述步骤a之前还包括发送任务模块对数据结构进行预处理操作。
所述预处理操作包括下述操作中的一个或多个对数据结构进行过滤操作;对数据结构进行排序操作;对数据结构进行展开操作。
所述关联关系为指针变量。
所述数据结构为数据缓冲数据结构,或向量数据缓冲数据结构,或链表数据结构,或树数据结构,或二叉树数据结构,或应用自展开数据结构。
所述任务模块为进程模块或线程模块。
通过上述技术方案的描述可知,本发明的发送任务模块和接收任务模块通过对偏移量信息和数据结构的关联关系如指针等进行转换,使发送任务模块在不需要将完整的数据结构转换为非数据结构描述数值的情况下,能够将数据结构通过消息、套接字等传输至接收任务模块;这样,接收任务模块也不需要进行非数据结构描述数值到完整数据结构的转换操作,接收任务模块只需要将偏移量转换为数据结构的关联关系即可,使进程之间可以方便、快捷的实现数据结构的传输;本发明可以通过基于共享内存的消息传输数据结构、通过基于文件的消息传输数据结构、通过基于系统消息队列的消息传输数据结构、通过套接字传输数据结构,实现方式灵活多样;本发明的发送任务模块可以在数据结构发送过程中对数据结构进行预处理操作,如过滤、排序、展开等,使进程之间能够更加快捷的实现数据结构的传输;本发明的发送任务模块和接收任务模块可以在发送数据的同时做数据结构展开和指针转换的工作,进一步提高了数据结构的传输效率;从而通过本发明提供的技术方案实现了提高数据结构传输效率,提高数据结构传输通用性的目的。


图1是本发明实施例的数据结构传输流程图;图2是本发明实施例的使用消息传递数据结构的流程图;图3是本发明实施例的应用进程A的链表数据结构复制并展开到共享内存空间内的流程图;图4是本发明实施例的应用进程B从共享内存空间获取链表数据结构并复制到本进程空间内的流程图。
具体实施例方式
数据结构一般是由数据和关联关系组成的,数据结构中的数据是数值的形成,但是关联关系如指针变量等不是纯粹的数值形式,即关联关系与位置相关,而消息中的数据只能是纯粹的数值,即消息中的数据与位置无关。如果发送任务模块能够将数据结构中的关联关系如指针变量等转换为偏移量信息,则发送任务模块就能够通过消息等形式的传输介质将数据结构传输至接收任务模块,而接收任务模块也能够通过偏移量信息到指针变量的转换恢复出数据结构,从而在不需要发送任务模块、接收任务模块进行数据结构与非数据结构描述数值转换的情况下,实现了任务间如进程间的数据结构传输。
本发明的核心技术内容如附图1所示。
图1中,在步骤100,发送任务模块将数据结构的关联信息转换为与数据结构中的数据存放位置相关的偏移量。
到步骤110,发送任务模块将上述该偏移量信息和数据结构中的数据传输至接收任务模块。
到步骤120,接收任务模块将其接收到的偏移量信息转换为关联信息,并根据该关联信息、数据结构中的数据恢复数据结构。
本发明中的发送任务模块、接收任务模块可以为发送进程模块、接收进程模块;也可以为发送线程模块、接收线程模块。下面以发送进程模块、接收进程模块为例进行描述。
本发明数据结构中的数据和偏移量信息可以通过消息、套接字的方式在进程间传输。这里的消息可以为基于共享内存的消息,也可以为基于文件的消息,还可以为基于系统消息队列的消息。
当发送进程模块和接收进程模块之间通过基于共享内存的消息来传递数据结构时,发送进程模块即进程A和接收进程模块即进程B之间传输数据结构过程如附图2所示。
图2中,在步骤1、进程A需要向进程B发送数据结构,进程A选择需要发送的消息类型,这里的消息类型包括数据结构的类型信息,也就是说,消息类型信息中携带有数据结构的类型信息。这里,数据结构的类型可以为数据缓冲、向量数据缓冲、双向链表、树、二叉树、应用自展开数据结构等。这里的数据结构的类型信息还包括数据结构中数据的大小等。
当进程A与进程B之间传输的消息为定长的消息时,消息中也可以不携带数据结构中数据的大小,此时,进程A和进程B为数据结构分配的内存为固定大小的内存空间。
在步骤2至步骤4是进程A的消息发送模块对数据结构进行预处理操作,具体过程为在步骤2、进程A的消息发送模块判断进程A是否需要对数据结构进行过滤操作,如果需要,则到步骤2.1,消息发送模块对数据结构进行过滤操作,如调用应用的过滤函数对数据结构进行过滤操作,然后,到步骤3。如果不需要对数据结构进行过滤操作,则直接到步骤3。
在步骤3、进程A的消息发送模块判断进程A是否需要对数据结构进行排序操作,如果需要,则到步骤3.1,消息发送模块对数据结构进行排序操作,如调用应用的排序函数对数据结构进行排序操作,然后,到步骤4。如果不需要对数据结构进行排序操作,则直接到步骤4。
在步骤4、进程A的消息发送模块判断进程A是否需要对数据结构进行数据结构展开操作,如果需要,则到步骤4.1,消息发送模块对数据结构进行数据结构展开操作,如调用应用的数据结构展开函数对数据结构进行展开操作,然后,到步骤5。如果不需要对数据结构进行展开操作,则直接到步骤5。
当然,在进程间的数据结构传输过程中,也可以不需要经过步骤2至步骤4,或者仅包括步骤2至步骤4中的任意一个或任意两个,或者还可以进行除步骤2至步骤4列出预处理操作之外的其他预处理操作。本发明不限制预处理操作的具体形式。
在步骤5、消息发送模块计算其需要发送的消息的大小,即消息发送模块确定数据结构中的数据的大小,并根据数据的大小在共享内存中分配存储空间连续的内存。
到步骤6、消息发送模块将数据结构中的数据复制到为该数据结构分配的共享内存的存储空间中。
到步骤7、消息发送模块将该数据结构的各指针转换为相对于共享内存基地址的偏移量。如果数据结构为链表,则消息发送模块可以将链表的两个指针分别转换为相对于共享内存基地址的偏移量;如果数据结构为二叉树,则消息发送模块可以将二叉树的三个指针分别转换为相对于共享内存基地址的偏移量;如果数据结构为树,则消息发送模块可以将树的两个指针和子结点的个数分别转换为相对于共享内存基地址的偏移量。
当然,这里的偏移量可以为相对于共享内存的某个预定地址的偏移量。
到步骤8、进程A的消息发送模块将上述设置的基于共享内存的消息发送至进程B。
到步骤9、进程B的消息接收模块接收到基于共享内存的消息,从消息中携带的数据结构的类型信息中获取共享内存中存储的数据结构的数据的大小信息,并根据数据的大小在进程B的内存空间中分配内存,此时,在进程B的内存空间中分配的内存可以不为连续的内存空间。
到步骤10、进程B的消息接收模块根据偏移量信息、数据的大小将共享内存中数据结构的数据复制到进程B的内存中。在进程B的消息接收模块将数据结构的数据复制到进程B的内存中的同时,到步骤11,接收模块将偏移量转换为各指针变量。
到步骤12、进程B获得消息接收模块转换后的数据结构。
在上述流程的描述过程中,消息接收模块也可以不将共享内存中的数据复制到进程B的内存中,而是根据偏移量信息直接锁定共享内存中存储数据结构的数据的存储空间,然后,将所述偏移量信息转换为指针变量,消息接收模块根据该指针变量、数据结构类型信息、共享内存中的数据恢复数据结构。
下面以双向链表为例,结合附图3对上述描述过程中进程A将其内存空间中的数据结构存储在共享内存的过程进行说明。
图3的左图中,灰色图块即0x8000A128、0x8000A1A8等图块为需要进行转换的内容,该内容在共享内存中的含义为偏移量信息,在应用进程A的内存空间中的含义为双向链表的指针变量。
图3标注为Data、且带不同背景条格的图块为不需要进行转换的内容,这些内容为数据结构中的数据,从图3的左、右两图可以看出,应用进程A的内存空间和共享内存中存储的数据结构的数据是一一对应的,即图3的左右两图包括的背景条格的图块完全相同。
进程A的消息发送模块将双向链表的指针转换为偏移量的转换步骤如下步骤1、消息发送模块利用链表头偏移量0x9100转换为指针0xC000A100,找到第一个数据块,并在进程A的内存中为其分配内存0x8000A100,并复制数据。
步骤2、消息发送模块根据链表的next偏移量0x9128找到下一个数据块,并在进程A的内存中为其分配内存0x8230A100,并复制数据,同时,将prev偏移量转换为偏上个数据块地址0x8230A000,将上一个数据块的next偏移量改为本数据块地址0x8230A100。
步骤3、消息发送模块重复步骤2的操作,直到链表结束。然后,消息发送模块将第一个数据块的prev偏移量改为尾数据块地址0x8230A300,将尾数据块的next偏移量改为链表头数据块地址0x8230A000。
续前例,下面结合附图4对上述描述过程中进程B将共享内存空间中的数据结构存储在其内存中的过程进行说明。
图4的左图中,灰色图块即0x9178、0x9128等图块为需要进行转换的内容,该内容在共享内存中的含义为偏移量信息,在应用进程B的内存空间中的含义为双向链表的指针变量。
图4标注为Data、且带不同背景条格的图块为不需要进行转换的内容,这些内容为数据结构中的数据,从图3的左、右两图可以看出,应用进程B的内存空间和共享内存中存储的数据结构的数据是一一对应的,即图4的左右两图包括的背景条格的图块完全相同。
进程B的消息接收模块将偏移量转换为双向链表指针的转换步骤如下步骤1、消息接收模块利用链表头指针0xCF00A100找到第一个数据块,并在进程B的内存中为其分配内存0x8230A000,同时,复制数据。
步骤2、消息接收模块根据链表的next偏移量0x9128找到下一个数据块,并在进程B的内存中为其分配内存0x8230A100,复制数据,并将prev偏移量转换为偏上个数据块地址0x8230A000,将上一个数据块的next偏移量转换为本数据块地址0x8230A100。
步骤3、消息接收模块重复步骤2的操作,直到链表结束,然后,将第一个数据块的prev偏移量转换为尾数据块地址0x8230A300,将尾数据块的next偏移量转换为链表头数据块地址0x8230A000。
当发送进程模块和接收进程模块之间通过基于文件的消息来传递数据结构时,发送进程模块即进程A和接收进程模块即进程B之间传输数据结构的过程为进程A需要向进程B发送数据结构,进程A选择需要发送的消息类型。进程A的消息发送模块可以根据实际需要对数据结构进行预处理操作。消息发送模块将数据结构中的数据存储在文件中。该文件能够被消息接收模块访问。在将数据存储在文件的过程中,消息的消息发送模块将该数据结构的各指针转换为相对于文件起始存储地址的偏移量,然后,进程A发送模块将上述设置的基于文件的消息发送至进程B。进程B的消息接收模块收到基于文件的消息,从消息的数据结构类型的信息中获取数据结构的数据的大小,并根据数据的大小在进程B的内存空间中分配内存。进程B的消息接收模块根据偏移量信息、数据结构的数据的大小将文件中数据结构的数据复制到进程B的内存中。在进程B的消息接收模块将数据结构的数据复制到进程B的内存中的同时,消息接收模块将偏移量转换为各指针变量。消息接收模块将转换后的数据结构分发到进程B。
当发送进程模块和接收进程模块之间通过基于系统消息队列的消息来传递数据结构时,发送进程模块即进程A和接收进程模块即进程B之间传输数据结构的过程为进程A需要向进程B发送数据结构,进程A选择需要发送的消息类型。进程A的消息发送模块可以根据实际需要对数据结构进行预处理操作。消息发送模块将数据结构中的数据存储在系统消息队列中。系统消息队列能够被消息接收模块访问。在将数据存储在系统消息队列的过程中,消息发送模块将该数据结构的各指针转换为相对于系统消息队列起始存储地址的偏移量,然后,进程A的消息发送模块将上述设置的基于系统消息队列的消息发送至进程B。进程B的消息接收模块收到基于系统消息队列的消息,从消息的数据结构类型信息中获取系统消息队列中存储的数据结构的数据的大小信息,并根据数据的大小在进程B的内存空间中分配内存。进程B的消息接收模块根据偏移量信息、数据结构中数据的大小将系统消息队列中数据结构的数据复制到进程B的内存中。在进程B的消息接收模块将数据结构的数据复制到进程B的内存中的同时,消息接收模块将偏移量转换为各指针变量。消息接收模块将数据结构分发到进程B。
当发送进程模块和接收进程模块之间通过套接字来传递数据结构时,发送进程模块即进程A和接收进程模块即进程B之间传输数据结构的过程为进程A需要向进程B发送数据结构,进程A的消息发送模块可以根据实际需要对数据结构进行预处理操作。消息发送模块将数据结构中的各指针转换为相对于套接字起始位置的偏移量,并将该偏移量、数据结构的类型信息和数据结构中的数据打包,并通过套接字传输至进程B。进程B的消息接收模块收到套接字后,从套接字中的数据结构的类型信息中获取套接字中数据结构的数据大小信息,并根据数据的大小在进程B的内存空间中分配内存。进程B的消息接收模块根据偏移量信息、数据的大小将套接字中数据结构的数据复制到进程B的内存中。在进程B的消息接收模块将数据结构的数据复制到进程B的内存中的同时,消息接收模块将偏移量转换为各指针变量。消息接收模块将转换后的数据结构分发到进程B。
从上面技术方案的描述可以看出,本发明提供了一种具有通用性的在进程之间传送数据结构的方法,设计方案简单,易于实现。本发明在新增特性时,不影响原有代码的原有特性,即在不需要修改现有的基于消息的程序代码的前提下,能够采用本发明提供的技术方案实现数据结构传输。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,本发明的申请文件的权利要求包括这些变形和变化。
权利要求
1.一种数据结构传输方法,其特征在于,所述方法包括步骤a、发送任务模块将数据结构的关联信息转换为与数据结构中的数据存放位置相关的偏移量信息;b、发送任务模块将所述偏移量信息和数据结构中的数据传输至接收任务模块;c、接收任务模块将所述偏移量信息转换为关联信息,并根据该关联信息、数据结构中的数据恢复数据结构。
2.如权利要求1所述的方法,其特征在于,所述步骤b具体包括发送任务模块将数据结构中的数据存储在共享内存/文件/系统消息队列中,并将与所述数据存储位置相关的偏移量信息、数据结构类型信息和数据通过基于共享内存/文件/系统消息队列的消息发送至接收任务模块。
3.如权利要求2所述的方法,其特征在于,所述步骤b中,所述数据结构中的数据连续存储在共享内存/系统消息队列中。
4.如权利要求2所述的方法,其特征在于,所述步骤b中数据存储在共享内存/系统消息队列中时,所述步骤c包括接收任务模块根据所述偏移量信息、数据结构类型信息将共享内存/系统消息队列中的数据复制到接收任务模块内存中,并将所述偏移量信息转换为关联信息,接收任务模块根据该关联信息、数据结构类型信息及接收任务模块内存中的数据恢复数据结构;或接收任务模块根据所述偏移量信息、数据结构类型信息锁定共享内存/系统消息队列中的数据结构,并将所述偏移量信息转换为关联信息,接收任务根据该关联信息、数据结构类型信息及共享内存/系统消息队列中的数据恢复数据结构。
5.如权利要求1所述的方法,其特征在于,所述步骤b具体包括发送任务模块将数据结构中的数据携带于网络套接字中,并将与数据在网络套接字中的位置相关的偏移量信息,数据结构类型信息和数据通过网络套接字发送至接收任务模块。
6.如权利要求1至5中任一权利要求所述的方法,其特征在于,所述步骤a之前还包括发送任务模块对数据结构进行预处理操作。
7.如权利要求6所述的方法,其特征在于,所述预处理操作包括下述操作中的一个或多个对数据结构进行过滤操作;对数据结构进行排序操作;对数据结构进行展开操作。
8.如权利要求1至5中任一权利要求所述的方法,其特征在于,所述关联关系为指针变量。
9.如权利要求1至5中任一权利要求所述的方法,其特征在于,所述数据结构为数据缓冲数据结构,或向量数据缓冲数据结构,或链表数据结构,或树数据结构,或二叉树数据结构,或应用自展开数据结构。
10.如权利要求1至5中任一权利要求所述的方法,其特征在于,所述任务模块为进程模块或线程模块。
全文摘要
本发明提供一种数据结构传输方法,首先,本发明的发送任务模块将数据结构的关联信息转换为与数据结构中的数据存放位置相关的偏移量信息,然后,发送任务模块将该偏移量信息和数据结构中的数据传输至接收任务模块,这样,接收任务模块将所述偏移量信息转换为关联信息,并根据该关联信息、数据结构中的数据恢复数据结构。本发明提供的数据结构传输方法能够在进程间方便、高效的实现数据结构传输,而且,本发明提供的数据结构传输方法适用范围广泛,从而实现了提高数据结构的传输效率、提高数据结构传输通用性的目的。
文档编号G06F9/46GK1924817SQ20061012745
公开日2007年3月7日 申请日期2006年9月15日 优先权日2006年9月15日
发明者南元 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1