CN114697402A - 物联网协议序列化方法、装置及电子设备 - Google Patents
物联网协议序列化方法、装置及电子设备 Download PDFInfo
- Publication number
- CN114697402A CN114697402A CN202011594948.6A CN202011594948A CN114697402A CN 114697402 A CN114697402 A CN 114697402A CN 202011594948 A CN202011594948 A CN 202011594948A CN 114697402 A CN114697402 A CN 114697402A
- Authority
- CN
- China
- Prior art keywords
- internet
- serialization
- things protocol
- members
- initialization
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种物联网协议序列化方法、装置及电子设备,涉及通信技术领域,该方法包括:基于预先定义的第一宏,确定物联网协议的包含多个成员的结构体;基于预先定义的第二宏,获取所述结构体的初始化函数;依据初始化函数,获取包括结构体的多个成员的调用链以及结构体的每个成员的初始化数据;依据调用链,对初始化数据进行序列化处理,获得物联网协议的序列化数据。本发明可以提高物联网协议序列化获取目标信息的效率。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种物联网协议序列化方法、装置及电子设备。
背景技术
对象序列化技术,是将对象的状态信息转换为可以存储或传输的形式的过程,转换之后的数据形式必须易于存储在外部介质上,或者易于使用网络进行传输。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化应用非常广泛,物联网协议在网络上传输,需要发送端对物联网协议进行序列化,接收端接收序列化的物联网协议数据,再进行反序列化,可获取物联网协议的相关信息。在物联网协议中,为节省流量,一个字节可以传递多个信息,但目前的序列化方法基本上以字节为最小单位,在一个字节可以传递多个信息的情况下,需要用户再编写代码,从指定的字节中按照协议截取出对应的信息。可见,通过现有技术中的物联网协议序列化获取目标信息的效率较低。
发明内容
本发明实施例提供一种物联网协议序列化方法、装置及电子设备,以解决物联网协议序列化的问题。
第一方面,本发明实施例提供一种物联网协议序列化方法,包括:
基于预先定义的第一宏,确定所述物联网协议的包含多个成员的结构体;
基于预先定义的第二宏,获取所述结构体的初始化函数;
依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据;
依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据。
第二方面,本发明实施例提供一种物联网协议序列化装置,包括:
确定模块,用于基于预先定义的第一宏,确定所述物联网协议的包含多个成员的结构体;
第一获取模块,用于基于预先定义的第二宏,获取所述结构体的初始化函数;
第二获取模块,用于依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据;
处理模块,用于依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据。
第三方面,本发明实施例提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的程序或者指令,所述程序或者指令被所述处理器执行时实现本发明实施例提供的物联网协议序列化方法中的步骤。
第四方面,本发明实施例提供一种可读存储介质,其特征在于,所述可读存储介质上存储有程序或指令,所述程序或指令被处理器执行时实现本发明实施例提供的物联网协议序列化的步骤。
本发明实施例中,基于预先定义的第一宏,确定物联网协议的包含多个成员的结构体;进一步的,基于预先定义的第二宏,获取所述结构体的初始化函数;进一步的,依据初始化函数,获取包括结构体的多个成员的调用链以及结构体的每个成员的初始化数据;最后,依据调用链,对初始化数据进行序列化处理,获得物联网协议的序列化数据。通过预先定义的第一宏以及第二宏,获取物联网协议的初始化数据,对初始化数据进行序列化处理可以获得序列化数据,在物联网协议一个字节包括多个信息的情况下,通过序列化数据可以直接从指定的字节中按照协议截取出对应的目标信息,从而可以提高物联网协议序列化获取目标信息的效率。
附图说明
图1是本发明实施例提供的一种物联网协议序列化方法的流程图之一;
图2是本发明实施例提供的一种物联网协议序列化方法的流程图之二;
图3是本发明实施例提供的一种物联网协议序列化方法的流程图之三;
图4是本发明实施例提供的一种物联网协议序列化装置的结构图之一;
图5是本发明实施例提供的一种物联网协议序列化装置的结构图之二;
图6是本发明实施例提供的一种物联网协议序列化装置的结构图之三;
图7是本发明实施例提供的一种物联网协议序列化装置的结构图之四;
图8是本发明实施例提供的一种物联网协议序列化装置的结构图之五;
图9是本发明实施例提供的一种物联网协议序列化装置的结构图之六;
图10是本发明实施例提供的一种电子设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”所区别的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。
请参见图1,图1是本发明实施例提供的一种物联网协议序列化方法的流程图之一,如图1所示,包括以下步骤:
步骤101、基于预先定义的第一宏,确定物联网协议的包含多个成员的结构体。
其中,第一宏可以用于定义物联网协议的数据类型,即可以用于确定物联网协议的包含多个成员的结构体。另外,结构体中各成员的数据类型可以支持int8、int16、int32、int64、vint32、float、double、string和bytes类型,可以通过宏add_iot_type定义上述各种结构体的类型。
第一宏主要包括宏iot_def_struct_begin、宏iot_add_elem、宏iot_add_ref_elem和宏iot_def_struct_end。宏iot_def_struct_begin接收一个参数,可以用于指定所定义的结构体名称;宏iot_add_elem接收两个参数,可以用于添加成员名称和类型;宏iot_add_ref_elem接收一个参数,可以用于指定引用的字段名称;宏iot_def_struct_end在结构体的末尾添加一个空的iot_helper_t成员,可以用于控制结构体定义结束。上述结构体成员的数据类型在宏iot_add_elem中展开,会统一加上前缀“iot_”和后缀“_t”,例如,int8类型将会被替换为“iot_int8_t”。
需要说明的是,第一宏去确定的结构体可以拥有一个iot_heler_t类型的head元素,也称为头部节点元素,该元素可以记录当前节点的兄弟节点、被引用节点以及操作集合。操作集合主要包括初始化函数、求长度函数、序列化函数、反序列化函数和销毁函数。结构体成员所支持的每一种数据类型都可以预先定义对应的函数,并生成一个类型为iot_node_op_t的全局对象,该全局对象的命名规则为以“g_”为前缀,后跟类型名,再接后缀“_node_op”。例如,结构体成员的数据类型为int32类型,需要初始化一个名为g_int32_node_op的全局对象,在定义int32类型时,可以将其op字段赋值为g_int32_node_op的地址。
同时,引用成员的数据类型固定为iot_int8_t,宏iot_add_ref_elem可以将引用成员的op(operation,操作)字段设置为空,即引用成员的数据类型不会参与任何操作。另外,引用成员的数据类型在定义时可以被添加到被引用成员的数据类型的header字段的引用链上,在进行数据序列化处理时,被引用成员的数据类型会依次采用其引用链上的成员来设置自身对应bit(binary digit,二进制位)位的值。
步骤102、基于预先定义的第二宏,获取所述结构体的初始化函数。
其中,预先定义的第二宏可以用于定义初始化函数。一般而言,第二宏包括宏iot_init_begin、宏iot_queue_up_elem、宏iot_queue_up_ref_elem和宏iot_init_end。宏iot_init_begin可以接收结构体名、第一个成员名和第一个成员类型三个参数,由于所定义的结构体都具有一个名为header的成员,所以第一个成员将被设置到header的sibling成员上;宏iot_queue_up_elem可以接收成员名、成员类型、过滤函数以及用于过滤函数的参数节点四个参数,宏iot_queue_up_elem可以将当前节点挂到上一个节点的后面,同时还可以设置操作类型和过滤器等;宏queue_up_ref_elem可以用于初始化引用节点,可以接收成员名、被引用的节点名、引用起始位和引用结束位四个参数,可以将当前节点挂载到被引用节点的引用链上;宏init_end可以用于定义初始化函数的结束,可以将结构体的最后的成员的后继成员指向前面的结构体的空成员,用于结构体成员遍历的结束,因此可以一次遍历结构体的所有成员,并调用初始化函数对所有成员进行初始化。
步骤103、依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据。
在初始化函数中,可以将结构体的每个成员通过其sibling字段进行链接,可以获得获取包括结构体的多个成员的调用链。同时,设置结构体中每个成员的op字段和filter字段,对于结构体中具有引用关系的成员类型,还可以将被引用成员添加到引用成员的引用链上。结构体中每个成员组链成功后,可以依次遍历调用链,对每个成员进行初始化,获得每个成员的初始化数据。
步骤104、依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据。
一般而言,可以通过调用序列化函数算法对成员初始化数据进行序列化处理。序列化函数算法可以为iot_serialize函数算法,在iot_serialize函数算法中,遍历每个序列化数据,检查其引用链是否为空,如果引用链为空,则调用当前类型的op字段的函数序列化方法进行序列化,如果引用链不为空,检查当前数据类型。因引用类型只能引用数字成员,如果数据类型不为int8、int16、int32或int64中的一种,可以进行报错;如果数据类型为int8、int16、int32或int64中的一种,遍历每个引用成员,根据引用成员的值和引用的位置设置被引用成员的相应bit位,最后调用被引用成员的op字段的函数序列化方法进行序列化。
另外,在物联网协议中,一个字节可能包括多个信息,通过上述方法获取的序列化数据可以直接获取目标信息,不需要再编写代码,从指定的字节中按照协议截取出对应的目标信息,因此上述序列化方法可以提高物联网协议序列化获取目标信息的效率。同时,C/C++语言没有在标准库中提供对象序列化的功能,因此,需要使用C/C++语言实现对象序列化需要开发者自己设计库或使用第三方库,通过上述方法在C/C++语言中,通过宏来定义数据类型的方案,定义好的数据类型无需实现任何代码即具备序列化功能。
需要说明的是,上述步骤可以获取物联网协议的序列化数据,在此基础上,可以再对物联网协议的序列化数据进行反序列化处理。
本发明实施例中,基于预先定义的第一宏,确定物联网协议的包含多个成员的结构体;进一步的,基于预先定义的第二宏,获取所述结构体的初始化函数;进一步的,依据初始化函数,获取包括结构体的多个成员的调用链以及结构体的每个成员的初始化数据;最后,依据调用链,对初始化数据进行序列化处理,获得物联网协议的序列化数据。通过预先定义的第一宏以及第二宏,获取物联网协议的初始化数据,对初始化数据进行序列化处理可以获得序列化数据,在物联网协议一个字节包括多个信息的情况下,通过序列化数据可以直接从指定的字节中按照协议截取出对应的目标信息,从而可以提高物联网协议序列化获取目标信息的效率。
一种具体的实施方式,通过第一宏确定物联网协议的结构体,如下:
#define iot_def_packet_begin(pkt_name)\
typedef struct pkt_name{\
iot_helper_t head;
上述代码表示通过宏iot_def_struct_begin指定所定义的结构体名称。其中,head元素可以记录当前节点的初始化函数、求长度函数、序列化函数、反序列化函数和销毁函数,各操作函数的原型可以定义如下:
其中,int(*init)表示初始化函数、int(*len)表示求长度函数、int(*serialize)表示序列化函数、int(*deserialize)表示反序列化函数、int(*destroy)表示销毁函数;sibling字段用于指向当前字段的下一个字段;op字段指向当前类型的操作集合;filter和filter_node字段用于定义过滤器,如果filter字段不为空,在序列化和反序列化时,filter_node将被当做参数传递给指针函数filter,如果filter不为空且filter求值结果为true时,表示不需要序列化;own字段可以用于表示是否需要接管value字段的释放工作,如果需要,那么在对象销毁的时候需要释放掉value所指向的空间,如果不需要,避免二次释放空间引发程序异常;ref_beg和ref_end表示当前字段引用其他字段的起始和结束位置,由于引用一般都是在一个字节中,所以ref_beg和ref_end的取值范围是[0,7],且ref_end大于等于ref_beg。
进一步的,获取名为“example_struct”的结构体,该结构体包括一个名为elem的int16类型的成员,同时elem成员的第0和1位表示retain标记,第8-9代码用于表示qos(quality of service,服务质量),该结构体可以通过如下代码进行定义:
1 iot_def_packet_begin(example_struct);
2 iot_add_elem(elem,uint16);
3 iot_add_ref_elem(qos);
4 iot_add_ref_elem(retain);
5 iot_def_packet_end(example_struct);
6
7 iot_init_begin(example_struct,elem,uint16);
8 iot_queue_up_ref_elem(qos,elem,8,9);
9 iot_queue_up_ref_elem(retain,elem,0,1);
10 iot_init_end();
其中,第1行代码表示宏iot_def_struct_begin;第2行代码表示宏iot_add_elem;第3行、第4行代码表示宏iot_add_ref_elem;第5行代码表示宏iot_def_struct_end;第7行代码表示宏iot_init_begin;第8行代码表示宏iot_queue_up_elem;第9行代码表示宏iot_queue_up_ref_elem和第10行代码表示宏iot_init_end。
另外,根据上述定义的结构体,可以预先定义四个函数操作所定义的结构体。四个函数分别为求序列化后的数据长度的函数、对定义结构体进行序列化的函数、对定义的结构体进行反序列化的函数和销毁所定义的结构体的函数。这四个函数原型定义可以通过如下代码表示:
1 int iot_len(iot_helper_t*head,size_t*len);
2 int iot_serialize(char*data,size_t len,iot_helper_t*head);
3 int iot_deserialize(const char*data,size_t len,iot_helper_t*head,int8_t own);
4 int iot_destroy(iot_helper_t*head);
其中,第1行代码表示求序列化后的数据长度的函数,第2行代码表示对定义结构体进行序列化的函数,第3行代码表示对定义的结构体进行反序列化的函数,第4行代码表示销毁所定义的结构体的函数。
作为一种可选的实施方式,所述依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据,包括:
依据所述初始化函数,查找所述结构体的第一目标字段;
依据所述第一目标字段,将所述结构体的多个成员进行链接,得到包括所述结构体的多个成员的调用链;
遍历所述调用链,获得所述结构体的每个成员的初始化数据。
其中,依据预先定义的第二宏,可以查找结构体的第一目标字段,第一目标字段为sibling字段,可以用于指向当前字段的兄弟字段,即下一个字段,从而结构体的每个成员可以通过其sibling字段进行链接。
另外,在获取联网协议的调用链时,第二宏还可以根据数据的类型设置每个成员的op字段、filter字段。其中,filter和filter_node字段用于定义过滤器,如果filter字段不为空,在物联网协议序列化和反序列化时,filter_node将作为参数传递给指针函数filter,在filter不为空且filter求值结果为true时,可以过滤掉该字段,该字段不参与序列化。
需要说明的是,定义初始化函数中的宏init_end可以将最后成员的后继指向前面每个结构体都会有的空成员,用于成员遍历的结束。因此,在初始化函数中,可以遍历调用链中结构体的所有成员,调用初始化函数对结构体的所有成员进行初始化,获得结构体的每个成员的初始化数据。
该实施方式中,依据初始化函数,查找结构体的第一目标字段;进一步的,依据第一目标字段,将结构体的多个成员进行链接,得到包括结构体的多个成员的调用链;进一步的,遍历调用链,获得结构体的每个成员的初始化数据。通过遍历调用链获取初始化数据,可以提高获取初始化数据的准确性。
可选的,将结构体的多个成员进行链接,包括:
在结构体的多个成员包括引用成员和被引用成员的情况下,将引用成员添加到对应的被引用成员的引用链上。
在结构体的多个成员包括引用成员和被引用成员的情况下,可以将引用成员添加到被引用成员的header字段的引用链上,在进行序列化处理时,被引用成员可以依次采用其引用链上的引用成员来设置自身对应bit位的值。例如,一个结构体的多个成员包括属性、属性1和属性2,此处的属性可以根据实际应用场景进行确定。将属性1和属性2组合可以得到属性,因此,属性1和属性2为引用成员,属性为被引用成员,从而可以将属性1和属性2添加到对应的属性的引用链上。
该实施方式中,由于将引用成员添加到对应的被引用成员的引用链上,因此可以调用被引用成员的序列化函数进行序列化处理,引用链上的引用成员不参与序列化,可以用于设置被引用的成员的值,从而在用一个字节携带多个信息的物联网协议的序列化处理中,不需要进行再开发就可以获取目标信息。
可选的,在所述依据所述调用链,对所述成员初始化数据进行序列化处理,获得所述物联网协议的序列化数据之前,所述方法还包括:
对所述初始化数据进行长度计算,获得所述物联网协议的序列化数据的存储分配空间。
需要说明的是,数据类型int8、int16、int32和int64的长度分别为1字节、2字节、4字节和8字节;数据类型vint32表示序列化时采用Zigzag压缩算法对4字节整数压缩,同样反序列化时也采用Zigzag压缩算法解压,其总长不超过4个字节,因此vint32类型序列化后长度为1到4字节;数据类型float和double类型用于单精度浮点数和双精度浮点数,分别为4字节和8字节长度;数据类型string类型用于字符串,序列化时首先存储两字节的长度信息,再为具体的字符串数据,即string类型长度为字符串本身长度加上2;数据类型bytes类型也是传递字符串,但是不携带长度信息,即bytes类型长度为字符串本身长度。在序列化和反序列化之前,长度信息不会被序列化,可以计算数据的长度信息,从而用于提供对应的序列化以及反序列化后的数据储存空间。
其中,可以通过iot_len函数算法对成员的初始化数据进行长度计算,获得物联网协议的序列化数据的存储分配空间。另外,ot_len函数算法也可以称之为求序列化后的数据长度的函数。在序列化处理之前,若没有进行长度计算,所分配的序列化数据的存储空间可能过小,从而影响序列化数据的存储。可见,在进行序列化和/或反序列化处理之前,对初始化数据的长度进行计算,保证分配的序列化数据的存储空间满足序列化数据的存储的要求。
以定义的名称为“example_struct”的结构体为例,对该结构体的成员的初始化数据进行长度计算后,再进行序列化处理和反序列化处理如下:
1 example_struct es;
2 example_struct es1;
3 int len=0;
4 char*buff=null;
5 iot_init_example_struct(&es);
6 iot_init_example_struct(&es1);
7 es.qos.value=1;
8 es.retain.value=2;
9 iot_len(&es.head,&len);
10 buff=(char*)malloc(len);
11 iot_serialize(buff,len,&es.head);
12 iot_deserialize(buff,len,&es1.head,0);
其中,第1-2行代码表示申明变量es和es1;第3-4行代码表示计算每个成员的长度;第5-6行代码表示初始化变量es和es1;第7-8行代码表示对变量es进行赋值操作;第9-10代码表示行求变量序列化后的长度,并分配响应的存储空间;第11行代码表示对变量es进行序列化,将序列化结果存储与buff中;第12行代码表示用buff中的数据对变量es1进行反序列化。通过第3-4行代码和第9-10行代码,可以分配序列化数据和反序列化数据的存储空间。
该实施方式中,由于对结构体中每个成员的初始化数据进行长度计算,可以获得物联网协议的序列化数据的存储分配空间,从而可以给序列化数据分配满足要求的存储空间。
可选的,在所述依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据之后,所述方法还包括:
删除所述物联网协议的包含多个成员的结构体。
在获得物联网协议的序列化数据后,可以通过iot_destroy函数算法删除物联网协议的包含多个成员的结构体,减少储存空间的浪费,iot_destroy函数算法也可以称之为销毁函数。遍历结构体的每个成员,可以调用其destroy()函数,对成员进行删除。另外,根据上述的own字段的特征,对于string类型和bytes类型的成员,可以根据own字段是否为“0”作出相应的处理,在own值不为“0”且对于成员的value不为null时,可以调用destroy()函数释放相应的空间,避免内存泄漏。
该实施方式中,由于在获取物联网协议的序列化数据后,可以删除物联网协议的包含多个成员的结构体,从而可以释放存储空间。
可选的,对初始化数据进行序列化处理,包括:
遍历结构体中的每个成员对应的初始化数据;
在结构体多个成员中的任一成员对应的初始化数据具有引用链的情况下,利用预先定义的序列化函数对引用成员对应的被引用成员进行序列化处理。
在对结构体中每个成员的初始化数据进行序列化处理之前,将引用成员添加到对应的被引用成员的引用链上。因此,在对成员初始化数据进行序列化处理时,遍历结构体中的每个成员对应的成员初始化数据。在初始化数据具有引用链的情况下,利用预先定义的序列化函数对引用成员对应的被引用成员进行序列化处理,引用链上的引用成员不参与序列化。
该实施方式中,由于在结构体多个成员中的任一成员对应的初始化数据具有引用链的情况下,利用预先定义的序列化函数对引用成员对应的被引用成员进行序列化处理,引用链上的引用成员不参与序列化,从而在用一个字节携带多个信息的物联网协议的序列化处理中,不需要进行再开发就可以获取目标信息,可以提高获取目标信息的效率。
可选的,对初始化数据进行序列化处理,还包括:
在预先定义的第一宏具有过滤器功能的情况下,获取结构体中的任一成员的过滤器功能执行结果;
其中,在过滤器功能的执行结果为预设结果的情况下,对应的结构体的成员的初始化数据不参与序列化。
需要说明的是,第一宏中的filter和filter_node字段用于定义过滤器,过滤器定义完成,第一宏即具有过滤器功能。第二宏中的宏iot_queue_up可以接收过滤函数和用于过滤函数的参数节点。
在预先定义的第一宏具有过滤器功能的情况下,遍历结构体中所有成员的初始化数据,执行过滤器功能,再根据执行结果是否为预设结果,判断是否序列化当前节点。其中,预设结果为成员初始化数据满足过滤的条件或filter字段的求值结果为true,预设结果可以用“0”来表示。在filter字段不为空的情况下,物联网协议的序列化处理,filter_node将作为参数传递给指针函数filter,在filter求值结果为true时,可以过滤掉该字段,该字段不参与序列化。因此,在敏感信息不需要被序列化时,可以通过过滤器功能过滤该敏感信息,使其不参与序列化,从而满足用户的个性化需求。
另外,过滤器的参数为所依赖的节点,可以根据所依赖的节点值决定是否序列化当前节点,用于解决类似MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)等物联网协议根据前面的标记决定后续是否有相应字段的场景。
该实施方式中,在预先定义的第一宏具有过滤器功能且过滤器功能的执行结果为预设结果的情况下,可以过滤对应的结构体成员的不参与序列化,从而可以满足用户指定部分成员不参与序列化的个性化需求。
一种具体的实施方式,如图2所示,物联网协议序列化流程如下:
步骤201、开始。
步骤202、获取下一个成员。其中,下一个成员为结构体任一成员对应的初始化数据。在遍历结构体的所有成员的对应的初始化数据时,获取的第一个初始化数据即为获取的下一个成员,在第一个数据处理完毕后,第二个初始化数据为获取的下一个成员,并可以此类推,可以确定获取的下一个成员。
步骤203、是否设置了过滤器。该步骤用于判断获取的初始化数据是否通过设置了过滤器功能的宏定义所得。在设置了过滤器的情况下,执行步骤204;在没有设置过滤器的情况下,执行步骤205。
步骤204、过滤器执行结果是否为0。该步骤用于判断对成员初始化数据执行过滤器是否满足预设结果,该预设结果可以用0来表示。成员初始化数据执行过滤器满足预设结果表示对该成员初始化数据进行过滤,即该成员初始化数据不需要进行序列化处理。在过滤器执行结果为0的情况下,执行步骤208;在过滤器执行结果不为0的情况下,执行步骤205。
步骤205、引用链是否为空。引用链为空表示该成员初始化数据对应的成员没有对应的引用成员,引用链为空表示该成员初始化数据对应的成员为被引用成员。因此,在引用链为空的情况下,执行步骤207;在引用链不为空的情况下,执行步骤206。
步骤206、根据引用成员设置当前成员的bit位的值。遍历当前节点的引用链,根据引用链上的节点的值以及此节点所在被引用的位置,设置被引用节点的值。引用链上的节点本身不参与序列化,在序列化时可以用于设置被引用的节点的值。
步骤207、利用op字段的序列化函数进行序列化。其中,序列化函数为serialize函数,位于op字段。
步骤208、是否还有后继。该步骤用于在遍历成员初始化数据时,检查是否还有下一个成员。在还有下一个成员的情况下,执行步骤202;在没有下一个成员的情况下,执行步骤209。
步骤209、结束。
相对应的,在上述物联网协议序列化的基础上,如图3所示,物联网协议反序列化流程如下:
步骤301、开始。
步骤302、获取下一个成员。其中,下一个成员为结构体任一成员对应的序列化数据。在遍历结构体的所有成员的对应的序列化数据时,获取的第一个序列化数据即为获取的下一个成员,在第一个序列化数据处理完毕后,第二个序列化数据为获取的下一个成员,并可以此类推,可以确定获取的下一个成员。
步骤303、是否设置了过滤器。该步骤用于判断是否定义了具有过滤器功能的宏。在设置了过滤器功能的情况下,执行步骤304;在没有设置过滤器的情况下,执行步骤305
步骤304、过滤器执行结果是否为0。执行过滤器,根据其执行结果判断是否反序列化当前节点,该步骤用于判断序列化数据执行过滤器的结果是否满足预设结果,该预设结果可以用0来表示。序列化数据执行过滤器满足预设结果表示对该成员初始化数据进行过滤,即该节点不需要进行反序列化处理。在过滤器执行结果为0的情况下,执行步骤309;在过滤器执行结果不为0的情况下,执行步骤305。
步骤305、利用成员op字段的反序列化函数反序列化。其中,反序列化函数为deserialize函数,位于op字段。进行反序列化处理后,可以获取成员初始化数据。
步骤306、引用链是否为空。引用链为空表示该成员初始化数据对应的成员没有对应的引用成员,引用链为空表示该成员初始化数据对应的成员为被引用成员。因此,在引用链为空的情况下,执行步骤309;在引用链不为空的情况下,执行步骤307。
步骤307、数值类型是否满足要求。在当前成员不满足数值类型的要求时,执行步骤310;在当前成员满足数值类型的要求时,执行步骤308。
步骤308、根据当前值和引用成员的信息设置引用成员的值。遍历当前节点的引用链,根据节点的值以及引用链上的节点的值设置引用链上节点的值,解决了物联网协议中用一个字节来携带多个信息的场景,使得用户无须再编写代码即可直接访问属于同一个字节的多个信息。
步骤309、是否还有后继。该步骤用于在遍历成员初始化数据时,检查是否还有下一个成员。在还有下一个成员的情况下,执行步骤302;在没有下一个成员的情况下,执行步骤310。
步骤310、结束。
请参见图4,图4是本发明实施例提供的一种物联网协议序列化装置的结构图之一,如图4所示,物联网协议序列化装置400包括:
确定模块401,用于基于预先定义的第一宏,确定所述物联网协议的包含多个成员的结构体;
第一获取模块402,用于基于预先定义的第二宏,获取所述结构体的初始化函数;
第二获取模块403,用于依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据;
处理模块404,用于依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据。
可选的,如图5所示,第一获取模块402包括:
查找子模块4021,用于依据所述初始化函数,查找所述结构体的第一目标字段;
链接子模块4022,用于依据所述第一目标字段,将所述结构体的多个成员进行链接,得到包括所述结构体的多个成员的调用链;
第一遍历子模块4023,用于遍历所述调用链,获得所述结构体的每个成员的初始化数据。
可选的,链接子模块4022包括:
在结构体的多个成员包括引用成员和被引用成员的情况下,将引用成员添加到对应的被引用成员的引用链上。
可选的,如图6所示,物联网协议序列化装置400还包括:
计算模块405,用于对初始化数据进行长度计算,获得物联网协议的序列化数据的存储分配空间。
可选的,如图7所示,物联网协议序列化装置400还包括:
删除模块406,用于删除物联网协议的包含多个成员的结构体。
可选的,如图8所示,处理模块404包括:
第二遍历子模块4041,用于遍历结构体中的每个成员对应的成员初始化数据;
处理子模块4042,用于在结构体多个成员中的任一成员对应的初始化数据具有引用链的情况下,利用预先定义的序列化函数对引用成员对应的被引用成员进行序列化处理。
可选的,如图9所示,处理模块404还包括:
获取子模块4043,用于在预先定义的第一宏具有过滤器功能的情况下,获述结构体中的任一成员的过滤器功能执行结果;
其中,在过滤器功能的执行结果为预设结果的情况下,对应的结构体的成员的初始化数据不参与序列化。
本发明实施例提供的物联网协议序列化装置能够实现图1的方法实施例中的各个过程,为避免重复,这里不再赘述。
需要说明的是,本发明实施例中的物联网协议序列化装置可以是装置,也可以是电子设备中的部件、集成电路、或芯片。
请参见图10,图10是本发明实施例提供的一种电子设备的结构图,如图10所示,电子设备包括:存储器1001、处理器1002及存储在存储器1001上并可在处理器1002上运行的程序或者指令,程序或者指令被处理器1002执行时实现上述物联网协议序列化方法中的步骤。
本发明实施例还提供一种可读存储介质,可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述物联网协议序列化方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本申请实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (15)
1.一种物联网协议序列化方法,其特征在于,包括:
基于预先定义的第一宏,确定所述物联网协议的包含多个成员的结构体;
基于预先定义的第二宏,获取所述结构体的初始化函数;
依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据;
依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据。
2.如权利要求1所述的物联网协议序列化方法,其特征在于,所述依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据,包括:
依据所述初始化函数,查找所述结构体的第一目标字段;
依据所述第一目标字段,将所述结构体的多个成员进行链接,得到包括所述结构体的多个成员的调用链;
遍历所述调用链,获得所述结构体的每个成员的初始化数据。
3.如权利要求2所述的物联网协议序列化方法,其特征在于,所述将所述结构体的多个成员进行链接,包括:
在所述结构体的多个成员包括引用成员和被引用成员的情况下,将所述引用成员添加到对应的所述被引用成员的引用链上。
4.如权利要求1所述的物联网协议序列化方法,其特征在于,在所述依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据之前,所述方法还包括:
对所述初始化数据进行长度计算,获得所述物联网协议的序列化数据的存储分配空间。
5.如权利要求1所述的物联网协议序列化方法,其特征在于,在所述依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据之后,所述方法还包括:
删除所述物联网协议的包含多个成员的结构体。
6.如权利要求1所述的物联网协议序列化方法,其特征在于,所述对所述初始化数据进行序列化处理,包括:
遍历所述结构体中的每个成员对应的所述初始化数据;
在所述结构体多个成员中的任一成员对应的所述初始化数据具有引用链的情况下,利用预先定义的序列化函数对所述引用成员对应的被引用成员进行序列化处理。
7.如权利要求6所述的物联网协议序列化方法,其特征在于,所述对所述初始化数据进行序列化处理,还包括:
在所述预先定义的第一宏具有过滤器功能的情况下,获取所述结构体中的任一成员的过滤器功能执行结果;
其中,在所述过滤器功能的执行结果为预设结果的情况下,对应的所述结构体的成员的初始化数据不参与序列化。
8.一种物联网协议序列化装置,其特征在于,包括:
确定模块,用于基于预先定义的第一宏,确定所述物联网协议的包含多个成员的结构体;
第一获取模块,用于基于预先定义的第二宏,获取所述结构体的初始化函数;
第二获取模块,用于依据所述初始化函数,获取包括所述结构体的多个成员的调用链以及所述结构体的每个成员的初始化数据;
处理模块,用于依据所述调用链,对所述初始化数据进行序列化处理,获得所述物联网协议的序列化数据。
9.如权利要求8所述的物联网协议序列化装置,其特征在于,所述第一获取模块包括:
查找子模块,用于依据所述初始化函数,查找所述结构体的第一目标字段;
链接子模块,用于依据所述第一目标字段,将所述结构体的多个成员进行链接,得到包括所述结构体的多个成员的调用链;
第一遍历子模块,用于遍历所述调用链,获得所述结构体的每个成员的初始化数据。
10.如权利要求9所述的物联网协议序列化装置,其特征在于,所述链接子模块包括:
在所述结构体的多个成员包括引用成员和被引用成员的情况下,将所述引用成员添加到对应的所述被引用成员的引用链上。
11.如权利要求8所述的物联网协议序列化装置,其特征在于,还包括:
计算模块,用于对所述初始化数据进行长度计算,获得所述物联网协议的序列化数据的存储分配空间。
12.如权利要求8所述的物联网协议序列化装置,其特征在于,还包括:
删除模块,用于删除所述物联网协议的包含多个成员的结构体。
13.如权利要求8所述的物联网协议序列化装置,其特征在于,所述处理模块包括:
第二遍历子模块,用于遍历所述结构体中的每个成员对应的所述成员初始化数据;
处理子模块,用于在所述结构体多个成员中的任一成员对应的所述初始化数据具有引用链的情况下,利用预先定义的序列化函数对所述引用成员对应的被引用成员进行序列化处理。
14.如权利要求13所述的物联网协议序列化装置,其特征在于,所述处理模块还包括:
获取子模块,用于在所述预先定义的第一宏具有过滤器功能的情况下,获取所述结构体中的任一成员的过滤器功能执行结果;
其中,在所述过滤器功能的执行结果为预设结果的情况下,对应的所述结构体的成员的初始化数据不参与序列化。
15.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的程序或者指令,所述程序或者指令被所述处理器执行时实现如权利要求1至7中任一项所述的物联网协议序列化方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011594948.6A CN114697402B (zh) | 2020-12-29 | 2020-12-29 | 物联网协议序列化方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011594948.6A CN114697402B (zh) | 2020-12-29 | 2020-12-29 | 物联网协议序列化方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114697402A true CN114697402A (zh) | 2022-07-01 |
CN114697402B CN114697402B (zh) | 2023-07-14 |
Family
ID=82132329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011594948.6A Active CN114697402B (zh) | 2020-12-29 | 2020-12-29 | 物联网协议序列化方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114697402B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060271763A1 (en) * | 2005-05-31 | 2006-11-30 | Ronny Pedersen | Extracted-index addressing of byte-addressable memories |
EP2562974A1 (en) * | 2011-03-31 | 2013-02-27 | Huawei Technologies Co., Ltd. | Message multiple-transfer method, device and system |
CN105573956A (zh) * | 2015-12-10 | 2016-05-11 | 盛趣信息技术(上海)有限公司 | 序列化方法以及基于序列化的网络通信方法 |
CN106453213A (zh) * | 2015-08-11 | 2017-02-22 | 阿里巴巴集团控股有限公司 | 一种系统间调用方法及装置 |
US20180084063A1 (en) * | 2016-09-20 | 2018-03-22 | Ciena Corporation | Systems and methods for selecting efficient messaging between services |
CN110275789A (zh) * | 2019-06-24 | 2019-09-24 | 恒生电子股份有限公司 | 数据处理方法及装置 |
CN111124551A (zh) * | 2019-11-22 | 2020-05-08 | 矩阵元技术(深圳)有限公司 | 数据序列化、数据反序列化方法、装置和计算机设备 |
-
2020
- 2020-12-29 CN CN202011594948.6A patent/CN114697402B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060271763A1 (en) * | 2005-05-31 | 2006-11-30 | Ronny Pedersen | Extracted-index addressing of byte-addressable memories |
EP2562974A1 (en) * | 2011-03-31 | 2013-02-27 | Huawei Technologies Co., Ltd. | Message multiple-transfer method, device and system |
CN106453213A (zh) * | 2015-08-11 | 2017-02-22 | 阿里巴巴集团控股有限公司 | 一种系统间调用方法及装置 |
CN105573956A (zh) * | 2015-12-10 | 2016-05-11 | 盛趣信息技术(上海)有限公司 | 序列化方法以及基于序列化的网络通信方法 |
US20180084063A1 (en) * | 2016-09-20 | 2018-03-22 | Ciena Corporation | Systems and methods for selecting efficient messaging between services |
CN110275789A (zh) * | 2019-06-24 | 2019-09-24 | 恒生电子股份有限公司 | 数据处理方法及装置 |
CN111124551A (zh) * | 2019-11-22 | 2020-05-08 | 矩阵元技术(深圳)有限公司 | 数据序列化、数据反序列化方法、装置和计算机设备 |
Non-Patent Citations (3)
Title |
---|
NICHOLAS PALMER ET.AL.: "Serialization for Ubiquitous Systems: An Evaluation of High Performance Techniques on Java Micro Edition", 2008 THE SECOND INTERNATIONAL CONFERENCE ON MOBILE UBIQUITOUS COMPUTING, SYSTEMS, SERVICES AND TECHNOLOGIES * |
张苏超: "基于面向方面技术的软件检查点及恢复技术研究", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
梁白鸥;: "一种提高代码复用的C++序列化框架设计", 单片机与嵌入式系统应用 * |
Also Published As
Publication number | Publication date |
---|---|
CN114697402B (zh) | 2023-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7185017B1 (en) | System and method for selectively processing data sub-segments using a data mask | |
CN109460220A (zh) | 报文预定义代码生成方法、装置、电子设备和存储介质 | |
CN104683386A (zh) | 可定制响应的桩服务实现方法及装置 | |
CN111901157B (zh) | 一种基于k8s的服务部署方法、装置、设备、介质 | |
CN109634835B (zh) | 内存泄漏分析方法及相关装置 | |
CN111124551A (zh) | 数据序列化、数据反序列化方法、装置和计算机设备 | |
CN116225578A (zh) | 数据序列化方法、反序列化方法、进程间指令参数传递方法 | |
CN113391791A (zh) | 一种数据处理方法、装置及存储介质 | |
CN114564509B (zh) | 序列化方法、反序列化方法、设备、芯片以及介质 | |
CN112000589A (zh) | 一种数据写入方法、数据读取方法、装置及电子设备 | |
US7032027B1 (en) | Method of processing nested message layers | |
CN115098108A (zh) | 一种基于高阶函数的轻量级上下文敏感指针分析方法 | |
CN109558145A (zh) | 一种面向安卓应用的安装包体积优化方法及装置 | |
CN114697402A (zh) | 物联网协议序列化方法、装置及电子设备 | |
CN111061468B (zh) | 一种映射方法及装置 | |
CN117499380A (zh) | 一种自定义协议数据采集方法 | |
CN112148299A (zh) | 字节码对象拷贝方法、装置、设备和存储介质 | |
CN114048352B (zh) | Xml文件转换不定长结构体的方法 | |
CN113312031B (zh) | 一种软件通信体系结构的命名服务接口 | |
CN112579325B (zh) | 一种业务对象的处理方法、装置、电子设备和存储介质 | |
CN112130860B (zh) | Json对象解析方法、装置、电子设备及存储介质 | |
CN114490318A (zh) | 一种基于字节码增强实现弱隔离的环境治理系统及方法 | |
CN114116074A (zh) | 一种高性能的数据序列化及反序列化系统 | |
CN110489163B (zh) | 远程过程调用的识别方法、装置、设备及存储介质 | |
CN116483597B (zh) | 一种数据共享方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |