CN110120945A - 一种数据结构化封装的方法 - Google Patents
一种数据结构化封装的方法 Download PDFInfo
- Publication number
- CN110120945A CN110120945A CN201910328650.1A CN201910328650A CN110120945A CN 110120945 A CN110120945 A CN 110120945A CN 201910328650 A CN201910328650 A CN 201910328650A CN 110120945 A CN110120945 A CN 110120945A
- Authority
- CN
- China
- Prior art keywords
- data
- template
- segment
- encapsulation
- structural
- 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.)
- Pending
Links
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/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2212/00—Encapsulation of packets
Abstract
本发明公开了一种数据结构化封装的方法,首先根据待封装目标数据的结构,预先设计相应的结构化数据模板;将所述结构化数据模板初始化成模板对象;在解析待封装目标数据的二进制原始数据的过程中,每解析出一段明文,则根据解析协议将该段明文值赋给所述模板对象对应的数据段中;待全部二进制原始数据解析完成,则所述结构化数据模板也就填值完成,再输出相应的结构化数据。上述方法能简化数据封装的操作,使处理代码简洁可读性高,能灵活处理二进制原始数据格式的变动。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据结构化封装的方法。
背景技术
随着信息技术的发展,以及人们对信息技术需求的不断提高,越来越需要一些硬件传感器、低端非智能化的硬件设备以及物联网设备等能与服务器、个人电脑、智能化设备等进行数据交互。但由于硬件设备一般都受到大小、成本、用途、功耗等因素的约束,在数据处理与存储方面都比较简单,一般都是以某一特定格式的二进制数据进行存储,这使得外界系统要与之进行数据交互时,必须要有解析这一特定格式的二进制数据的能力,并要能把解析出的数据再封装成结构化数据供外界系统使用,上述解析与封装数据的方法是建立数据交互的关键技术。
现有技术方案一般是按照约定好的二进制数据格式,按部就班的进行解析,该方法存在如下缺点:按部就班解析方式的复杂度会随着数据格式的深度成倍增长;协议越复杂,数据结构化封装部分就越复杂、嵌套层次越深、代码可读性越差,使得难以维护;数据结构化封装部分的代码无法精简,代码量大;封装方式不灵活,只要二进制数据格式略有改动,对应的封装代码就必须做出相应调整。
发明内容
本发明的目的是提供一种数据结构化封装的方法,该方法能简化数据封装的操作,使处理代码简洁可读性高,能灵活处理二进制原始数据格式的变动。
本发明的目的是通过以下技术方案实现的:
一种数据结构化封装的方法,所述方法包括:
步骤1、根据待封装目标数据的结构,预先设计相应的结构化数据模板;
步骤2、将所述结构化数据模板初始化成模板对象;
步骤3、在解析待封装目标数据的二进制原始数据的过程中,每解析出一段明文,则根据解析协议将该段明文值赋给所述模板对象对应的数据段中;
步骤4、待全部二进制原始数据解析完成,则所述结构化数据模板也就填值完成,再输出相应的结构化数据。
在步骤1中,设计相应的结构化数据模板的过程具体为:
首先选择结构化数据模板封装格式,具体选择json格式作为结构化数据模板的封装格式;
然后学习原始协议的封装规则说明文档;
再根据原始协议的封装规则来分析二进制报文相对应的字段及明文意义,对各个字段进行分类,依据不同字段定义key名,按需调整key名的上下文位置及层次结构,最终得到json格式的结构化数据模板。
所述步骤3的过程具体为:
首先将待封装目标数据的二进制原始数据存入byte数组;
然后根据协议规则依次解析协议数据,具体为:
先解析第一段数据,从keyModelArray对象中取出预先定义好的第一段数据的key名,再将第一段数据的明文值赋给模板对象对应的数据段中;
再解析第二段数据,从keyModelArray对象中取出预先定义好的第二段数据的key名,再将第二段数据的明文值赋给模板对象对应的数据段中;
按照上述循环方式处理后续数据的解析,直到所有数据处理完成。
由上述本发明提供的技术方案可以看出,上述方法能简化数据封装的操作,使处理代码简洁可读性高,能灵活处理二进制原始数据格式的变动。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
图1为本发明实施例提供的数据结构化封装的方法流程示意图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
下面将结合附图对本发明实施例作进一步地详细描述,如图1所示为本发明实施例提供的数据结构化封装的方法流程示意图,所述方法包括:
步骤1、根据待封装目标数据的结构,预先设计相应的结构化数据模板;
在该步骤中,设计相应的结构化数据模板的过程具体为:
首先选择结构化数据模板封装格式;具体在设计结构化数据时,选用软件开发领域比较流行的json格式作为结构化数据模板的封装格式,该格式为“key-value”格式,优点是格式简洁,数据封装灵活,与不同开发语言之间的兼容比较好,编程时转换成数据对象比较容易;
然后学习原始协议的封装规则说明文档;
然后根据原始协议的封装规则来分析二进制报文相对应的字段及明文意义,对各个字段进行分类,依据不同字段定义key名,按需调整key名的上下文位置及层次结构,最终形成json格式的结构化数据模板。
举例来说,设计结构化数据模板的详细过程示例如下:
假设有如下这样一段协议的封装规则说明内容,该二进制报文的消息的总长度为13字节,各个字节的含义如下表1所示:
表1:封装规则
然后根据上表中的封装规则,这段协议主要有报文帧头、协议版本号、目标设备模式、预留字段、命令码、状态码这几个字段;
再分析每个字段的意义可以看出,报文帧头是用于标识帧命令开始位置的,因此不具备业务意义,这类字段在定义模板时可以抛弃;
结合json格式,我们可以把模板定为如下格式:
//字段名的模板
String keyModel="[{'key':'version'},{'key':
'deviceModel'},{'key':'reservedFields'},{'key':'code'},{'key':
'status'}]"
//结果模板
String restultModel="{'version':”,'deviceModel':”,'
reservedFields':”,'code':”,'status':”}";
值得注意的是,在定义模板阶段只需要把key值和层次结构确定即可,value先预留空字符串,在编程过程中填值。
步骤2、将所述结构化数据模板初始化成模板对象;
该步骤中,在编程语言中,对象是一种封装概念,是把特定的一种类型数据转换成编程语言中的一种特定对象,可方便程序中进行调用。
上述结构化数据模板初始化成模板对象这一步骤对于面向对象的编程语言来说,通过代码就可以实现,举例来说,以JAVA语言为例:
//字段名的模板
String keyModel="[{'key':'version'},{'key':'deviceModel'},{'key':'reservedFields'},{'key':'code'},{'key':'status'}]"
//结果模板
String restultModel="{'version':”,'deviceModel':”,'reservedFields':”,'code':”,'status':”}";
//转换成模板对象
JSONArray keyModelArray=JSONObject.parseArray(keyModel);
JSONObject restultModelObj=JSONObject.parseObject(restultModel)。
步骤3、在解析待封装目标数据的二进制原始数据的过程中,每解析出一段明文,则根据解析协议将该段明文值赋给所述模板对象对应的数据段中;
该步骤中,具体过程为:
首先将待封装目标数据的二进制原始数据存入byte数组;
然后根据协议规则依次解析协议数据,具体为:
先解析第一段数据,从keyModelArray对象中取出预先定义好的第一段数据的key名,再将第一段数据的明文值赋给模板对象对应的数据段中;
再解析第二段数据,从keyModelArray对象中取出预先定义好的第二段数据的key名,再将第二段数据的明文值赋给模板对象对应的数据段中;
按照上述循环方式处理后续数据的解析,直到所有数据处理完成。
举例来说,参考上述步骤1中表1的封装规则,假设二进制数据报文如下(为了方便书写和表述,此处把二进制数据以十六进制来书写):
7E 01 01 00 00 00 00 00 00 00 00 02 00
再以JAVA语言为例来处理上述二进制数据报文:
//将数据报文读入存入byte数组
byte[]data=
{'7E','01','01','00','00','00','00','00','00','00','00','02','00'};
//根据协议规则依次解析协议
//解析第一段数据
int version=Arrays.copyOfRange(data,1,2)
//从keyModelArray对象中取出预先定义好的第一段数据的key名
String keyName=keyModelArray.getJSONObject(1).getString('key')
//把第一段数据赋给模板对象对应的数据段中
jsonObj.put(keyName,version)
//解析第二段数据
int deviceModel=Arrays.copyOfRange(data,2,3)
//从keyModelArray对象中取出预先定义好的第二段数据的key名
String keyName=keyModelArray.getJSONObject(2).getString('key')
//把第二段数据赋给模板对象对应的数据段中
jsonObj.put(keyName,deviceModel)
……
//一直到处理完成
具体实现中,实际编程过程中会使用循环方式来处理第一段、第二段……第N段的数据解析,上述两段解析示例是为了方便描述,易于理解,采用了顺序处理方式。
步骤4、待全部二进制原始数据解析完成,则所述结构化数据模板也就填值完成,再输出相应的结构化数据。
举例来说,按照上述步骤1、2、3的操作处理完成后,最终输出的结构化数据为:
"{'version':1,'deviceModel':1,'reservedFields':”,'code':'2','status':'0'}"
值得注意的是,本发明实施例中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (3)
1.一种数据结构化封装的方法,其特征在于,所述方法包括:
步骤1、根据待封装目标数据的结构,预先设计相应的结构化数据模板;
步骤2、将所述结构化数据模板初始化成模板对象;
步骤3、在解析待封装目标数据的二进制原始数据的过程中,每解析出一段明文,则根据解析协议将该段明文值赋给所述模板对象对应的数据段中;
步骤4、待全部二进制原始数据解析完成,则所述结构化数据模板也就填值完成,再输出相应的结构化数据。
2.如权利要求1所述的数据结构化封装的方法,其特征在于,在步骤1中,设计相应的结构化数据模板的过程具体为:
首先选择结构化数据模板封装格式,具体选择json格式作为结构化数据模板的封装格式;
然后学习原始协议的封装规则说明文档;
再根据原始协议的封装规则来分析二进制报文相对应的字段及明文意义,对各个字段进行分类,依据不同字段定义key名,按需调整key名的上下文位置及层次结构,最终得到json格式的结构化数据模板。
3.如权利要求1所述的数据结构化封装的方法,其特征在于,所述步骤3的过程具体为:
首先将待封装目标数据的二进制原始数据存入byte数组;
然后根据协议规则依次解析协议数据,具体为:
先解析第一段数据,从keyModelArray对象中取出预先定义好的第一段数据的key名,再将第一段数据的明文值赋给模板对象对应的数据段中;
再解析第二段数据,从keyModelArray对象中取出预先定义好的第二段数据的key名,再将第二段数据的明文值赋给模板对象对应的数据段中;
按照上述循环方式处理后续数据的解析,直到所有数据处理完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910328650.1A CN110120945A (zh) | 2019-04-23 | 2019-04-23 | 一种数据结构化封装的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910328650.1A CN110120945A (zh) | 2019-04-23 | 2019-04-23 | 一种数据结构化封装的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110120945A true CN110120945A (zh) | 2019-08-13 |
Family
ID=67521292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910328650.1A Pending CN110120945A (zh) | 2019-04-23 | 2019-04-23 | 一种数据结构化封装的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110120945A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110933146A (zh) * | 2019-11-14 | 2020-03-27 | 厦门网宿有限公司 | 一种数据转换方法、装置和服务器 |
CN114222011A (zh) * | 2021-11-18 | 2022-03-22 | 中国长城科技集团股份有限公司 | 二进制协议图例生成方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103747004A (zh) * | 2014-01-19 | 2014-04-23 | 樊建 | 物联网平台通信协议的实现方法 |
CN105095268A (zh) * | 2014-05-12 | 2015-11-25 | 深圳市同洲电子股份有限公司 | 结构化数据的存取方法以及装置 |
CN106055450A (zh) * | 2016-05-20 | 2016-10-26 | 北京神州绿盟信息安全科技股份有限公司 | 一种二进制日志解析方法及装置 |
CN108881251A (zh) * | 2018-06-28 | 2018-11-23 | 广州大学 | 一种任意二进制设备接入解析与标准化的系统及方法 |
-
2019
- 2019-04-23 CN CN201910328650.1A patent/CN110120945A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103747004A (zh) * | 2014-01-19 | 2014-04-23 | 樊建 | 物联网平台通信协议的实现方法 |
CN105095268A (zh) * | 2014-05-12 | 2015-11-25 | 深圳市同洲电子股份有限公司 | 结构化数据的存取方法以及装置 |
CN106055450A (zh) * | 2016-05-20 | 2016-10-26 | 北京神州绿盟信息安全科技股份有限公司 | 一种二进制日志解析方法及装置 |
CN108881251A (zh) * | 2018-06-28 | 2018-11-23 | 广州大学 | 一种任意二进制设备接入解析与标准化的系统及方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110933146A (zh) * | 2019-11-14 | 2020-03-27 | 厦门网宿有限公司 | 一种数据转换方法、装置和服务器 |
CN110933146B (zh) * | 2019-11-14 | 2022-09-16 | 厦门网宿有限公司 | 一种数据转换方法、装置和服务器 |
CN114222011A (zh) * | 2021-11-18 | 2022-03-22 | 中国长城科技集团股份有限公司 | 二进制协议图例生成方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111666526B (zh) | 页面生成方法、装置、设备及存储介质 | |
CN103077185B (zh) | 一种基于对象的自定义扩展信息的方法 | |
CN106022483B (zh) | 机器学习模型之间进行转换的方法与设备 | |
CN103593194B (zh) | 对象序列化方法和装置 | |
CN109308224A (zh) | 跨平台数据通信、跨平台数据处理的方法、装置及系统 | |
CN111552838B (zh) | 数据处理方法及装置、计算机设备、存储介质 | |
CN104407863A (zh) | 抽象控件模型编程装置和方法 | |
CN105868289B (zh) | 一种多媒体课件生成方法及装置 | |
US20120254724A1 (en) | Encoder compiler, computer readable medium, and communication device | |
CN109670081A (zh) | 业务请求处理的方法及装置 | |
CN110120945A (zh) | 一种数据结构化封装的方法 | |
CN105183466A (zh) | 一种简化echarts调用的封装方法 | |
CN111523324A (zh) | 命名实体识别模型的训练方法及装置 | |
CN107861723A (zh) | 海量数据处理方法及其系统 | |
CN102520953B (zh) | 基于bpmn的页面生成方法和装置 | |
CN107222461B (zh) | 通信处理方法和装置 | |
CN108389244A (zh) | 一种根据指定字符规则渲染出flash富文本的实现方法 | |
CN110109675A (zh) | 智能合约处理方法、装置以及计算机可读存储介质 | |
EP3779672A1 (en) | System and method for generating unified experiences on digital platforms | |
CN111311461B (zh) | 基于b-s的结构化动态病历表单的编辑器及生成方法 | |
CN104462157B (zh) | 一种文本数据二次结构化的方法及装置 | |
CN115422902A (zh) | 基于模板生成问卷的方法及系统 | |
CN107463546A (zh) | 一种基于指标库的文档生成方法及系统 | |
WO2017084515A1 (zh) | 数据码流发送方法及装置 | |
CN103984555A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190813 |
|
RJ01 | Rejection of invention patent application after publication |