CN106648817A - 一种跨平台的数据对象传输方法 - Google Patents
一种跨平台的数据对象传输方法 Download PDFInfo
- Publication number
- CN106648817A CN106648817A CN201611129496.8A CN201611129496A CN106648817A CN 106648817 A CN106648817 A CN 106648817A CN 201611129496 A CN201611129496 A CN 201611129496A CN 106648817 A CN106648817 A CN 106648817A
- Authority
- CN
- China
- Prior art keywords
- var
- cross
- type
- data
- platform
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/457—Communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种跨平台的数据对象传输方法,包括如下步骤:步骤1:构建一个复合数据类型VAR,该复合数据类型支持六种基本类型的自由组合;所述六种基本类型为:字符串、字典、整数、浮点数、数组和二进制字符串;步骤2:将复合数据类型VAR序列化到二进制数据流中;步骤3:用复合数据类型VAR替代编程语言中的基本数据类型,在需要的时候进行存储或跨平台传输。本发明,通过定义一套高度抽象的通信协议,使其不陷入具体应用场景,该通信协议适用于大多数需要进行通信的场合,可实现跨平台的数据对象传输。
Description
技术领域
本发明涉及软件开发技术领域,具体说是一种跨平台的数据对象传输方法。
背景技术
在现有的软件开发中,不同的软件模块之间相互协作通常会借助进程间通信。在诸多进程间通信技术中,TCP/IP协议的套接字网络通信被各种编程语言和操作系统平台广泛支持,是最常用的进程间通信技术。
然而,在不同操作系统平台下,不同的编程语言对数据的支持并不统一,所以在传递数据(数据对象)的时候,软件模块之间通常会约定一个通信协议以便明确数据含义。在软件模块升级后功能增强的同时,也常常伴随着通信协议版本的升级。当系统逐渐庞大起来之后,不同版本的软件模块之间使用不同版本的通信协议进行通信就产生很多难题:
难题1:数据传输中数据类型表现困难。
难题2:数据通信时的通信协议版本升级,可能会造成采用高版本通信协议的软件模块与采用低版本通信协议的软件模块之间产生通信障碍。
难题3:通信协议变更会带来文档变更等等一系列工作。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种跨平台的数据对象传输方法,通过定义一套高度抽象的通信协议,使其不陷入具体应用场景,该通信协议适用于大多数需要进行通信的场合,可实现跨平台的数据对象传输。
为达到以上目的,本发明采取的技术方案是:
一种跨平台的数据对象传输方法,其特征在于,包括如下步骤:
步骤1:构建一个复合数据类型VAR,该复合数据类型支持六种基本类型的自由组合;
所述六种基本类型为:字符串、字典、整数、浮点数、数组和二进制字符串;
步骤2:将复合数据类型VAR序列化到二进制数据流中;
步骤3:用复合数据类型VAR替代编程语言中的基本数据类型,在需要的时候进行存储或跨平台传输。
在上述技术方案的基础上,步骤1中,所述数组中的每一项的元素是VAR类型;
字典中的每一项的键是字符串类型,字符串类型的值是VAR类型。
在上述技术方案的基础上,构建一个复合数据类型VAR的具体方法是:
在C++中通过class实现。
在上述技术方案的基础上,构建一个复合数据类型VAR的具体方法是:
在Java或C#中通过HashMap、ArrayList、Long、String的组合实现。
在上述技术方案的基础上,步骤1的具体步骤为:
步骤1-1:设计一个数据结构,该数据结构中包含了一个代表数据类型的元素和至少一个存储,所述存储用来实现所述六种基本类型;
步骤1-2:利用编程语言的特性将步骤1-1设计的结构体丰富,得到一个易用的数据类。
在上述技术方案的基础上,所述将步骤1-1设计的结构体丰富是指:使结构体支持各种运算操作,使其更符合语义也更方便使用;
所述运算操作包括但不限于:加法运算,减法运算,赋值运算,数组索引操作符。
在上述技术方案的基础上,步骤2的具体步骤为:
步骤2-1:准备一个二进制数据流;
步骤2-2:向前面准备好的流中写入一个4字节;
步骤2-3:读取VAR的类型,根据其值向二进制数据流中写入一个用于表达类型的字节,然后写入该VAR的值;
将步骤2-2中写入的4字节修改为步骤2-3为该VAR序列化得到的字节总数,现在就得到了一个能够展开为VAR的字符序列;
步骤2-4:步骤2-3得到了一个含有长度的字符序列,该序列己经可以简单地验证自身完整性了;
然后为该字符序列加入校验和、压缩加密等功能就得到了一个能够验证自身完整性并具有一定安全性可传输易存储能够还原为VAR的字节序列。
在上述技术方案的基础上,步骤2-3中,写入该VAR的值有以下六种可能的情况:
符序列;其中,UTF8编码无BOM头字符串的长度占4字节;
情况2.VAR字典存储为一个4字节的映射对数目,然后依次将每一组键值对按照先键后值的顺序存储;
情况3.VAR整数存储为大端64位整数,占8个字节;
情况4.VAR浮点数存储为64位浮点数,占8个字节;
情况5.VAR数组存储为一个4字节的数组元素数目,然后该列表中的元素递归按步骤2-2进行存储;
情况6.VAR二进制字符串存储为4字节的数据长度和字节序列,与普通字符串的区别是不需要将其转换编码。
在上述技术方案的基础上,步骤3的具体步骤为:
步骤3-1:在编程中,以VAR作为基本类型,用它替代所有需要跨平台使用的数据结构:对于C++语言通过重载运算符可以替代;对于Java和C#由于VAR子类型取材于语言本身,只要使用的数据类型可以转换为上述六中基本类型对应的类型即可;
步骤3-2:使用步骤2的方法将VAR转换为二进制字节数组,这时,VAR可以存储或传输,并且可以根据步骤2的方法从二进制字节数组在任意平台任意编程语言的模块中将该字节数组还原为该环境支持的VAR形态。
本发明所述的跨平台的数据对象传输方法,具有以下优点:
优点1:通信协议不会发生变化,版本变更(通信协议版本升级)只需要面对数据结构的变化。而数据结构的变化相对于协议变更来说非常容易做到。
优点2:稳定性、安全性、对于数据压缩的支持都得到了良好的保证。
优点3:使用简单,容易学习。
附图说明
本发明有如下附图:
图1复合数据类型VAR示意图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的跨平台的数据对象传输方法,包括如下步骤:
步骤1:构建一个复合数据类型VAR,该复合数据类型支持六种基本类型(基本结构)的自由组合;
所述六种基本类型为:字符串、字典、整数、浮点数、数组和二进制字符串;其中:
数组中的每一项的元素是VAR类型;
字典中的每一项的键(key)是字符串类型,字符串类型的值(value)是VAR类型;字典采用“<key,value>”的方式存储,key是唯一的,每个key对应一个value,可以直接通过key找到value;
作为一种可以选择的实施方式,构建一个复合数据类型VAR的具体方法是:
在C++中通过class实现,例如:
在Java或C#中通过HashMap、ArrayList、Long、String的组合实现,例如:
Map stu=new HashMap();
stu[“name”]=“小明”;
stu[“age”]=8;
ArrayList frd=new ArrayList();
frd.add(“小红”);
frd.add(“小刚”);
stu[“friend”]=frd;
步骤2:将复合数据类型VAR序列化到二进制数据流中;
步骤3:用复合数据类型VAR替代编程语言中的基本数据类型,在需要的时候进行存储或跨平台传输。
更进一步,还可以有如下所述步骤4:
步骤4:根据步骤2利用相反的方式从二进制数据流中反序列化恢复VAR。
在上述技术方案的基础上,步骤1的具体步骤为:
步骤1-1:设计一个数据结构(这个数据结构因编程环境各不相同,比如C++中是一个class,而在Java或C#中,可以用Object替代无需自己做),该数据结构中包含了一个代表数据类型的元素和至少一个存储(如果是Java或C#中的Object,因为反射机制可以获得类型所以也不用考虑了),所述存储用来实现所述六种基本类型;
步骤1-2:利用编程语言的特性将步骤1-1设计的结构体丰富,得到一个易用的数据类。
所述将步骤1-1设计的结构体丰富是指:使结构体支持各种运算操作,使其更符合语义也更方便使用,
所述运算操作包括但不限于:加法运算,减法运算,赋值运算,数组索引操作符;
例如:在C++语言中通过运算符重载可以实现这一目的。
在上述技术方案的基础上,步骤2的具体步骤为:
步骤2-1:准备一个二进制数据流;
例如:C++中的std::stringstream;
例如:Java中的java.util.ByteArrayOutputStream;
步骤2-2:向前面准备好的流中写入一个4字节;
步骤2-3:读取VAR的类型,根据其值向二进制数据流中写入一个用于表达类型的字节,然后写入该VAR的值,有以下六种可能的情况:
情况1.VAR字符串存储为UTF8编码无BOM头字符串的长度和字符序列;其中,UTF8编码无BOM头字符串的长度占4字节;
情况2.VAR字典存储为一个4字节的映射对数目,然后依次将每一组键值对按照先键后值的顺序存储;
情况3.VAR整数存储为大端64位整数,占8个字节;
情况4.VAR浮点数存储为64位浮点数,占8个字节;
情况5.VAR数组存储为一个4字节的数组元素数目,然后该列表中的元素递归按步骤2-2进行存储;
情况6.VAR二进制字符串存储为4字节的数据长度和字节序列,与普通字符串的区别是不需要将其转换编码;
将步骤2-2中写入的4字节修改为步骤2-3为该VAR序列化得到的字节总数,现在就得到了一个能够展开为VAR的字符序列;
步骤2-4:步骤2-3得到了一个含有长度的字符序列,该序列己经可以简单地验证自身完整性了;
然后为该字符序列加入校验和、压缩加密等功能就得到了一个能够验证自身完整性并具有一定安全性可传输易存储能够还原为VAR的字节序列。
在上述技术方案的基础上,步骤3的具体步骤为:
步骤3-1:在编程中,以VAR作为基本类型,用它替代所有需要跨平台使用的数据结构:对于C++语言通过重载运算符可以替代;对于Java和C#由于VAR子类型取材于语言本身,只要使用的数据类型可以转换为上述六中基本类型对应的类型(如Java中的java.util.HashMap可以替代字典java.util.ArrayList和java.util.Vector都可以替代数组)即可;
步骤3-2:使用步骤2的方法将VAR转换为二进制字节数组,这时,VAR可以存储或传输,并且可以根据步骤2的方法从二进制字节数组在任意平台任意编程语言的模块中将该字节数组还原为该环境支持的VAR形态。
所以,利用VAR可以将数据传输从通信协议协商问题转换为对象存储问题。利用树结构的分支能力表现通信中不同版本的差异,使各个版本的软件模块在一个VAR中能够找到符合自身的版本分支。VAR可以模拟结构体,所以也可以用结构体的方式进行文档编写,这种文档可以利用文档生成工具将结构的注释生成为文档。对比通信协议文档需要考虑数据的存储结构和各个版本的差异,描写数据结构的文档显然更容易维护。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (9)
1.一种跨平台的数据对象传输方法,其特征在于,包括如下步骤:
步骤1:构建一个复合数据类型VAR,该复合数据类型支持六种基本类型的自由组合;
所述六种基本类型为:字符串、字典、整数、浮点数、数组和二进制字符串;
步骤2:将复合数据类型VAR序列化到二进制数据流中;
步骤3:用复合数据类型VAR替代编程语言中的基本数据类型,在需要的时候进行存储或跨平台传输。
2.如权利要求1所述的跨平台的数据对象传输方法,其特征在于:步骤1中,所述数组中的每一项的元素是VAR类型;
字典中的每一项的键是字符串类型,字符串类型的值是VAR类型。
3.如权利要求1所述的跨平台的数据对象传输方法,其特征在于:构建一个复合数据类型VAR的具体方法是:
在C++中通过class实现。
4.如权利要求1所述的跨平台的数据对象传输方法,其特征在于:构建一个复合数据类型VAR的具体方法是:
在Java或C#中通过HashMap、ArrayList、Long、String的组合实现。
5.如权利要求1所述的跨平台的数据对象传输方法,其特征在于:步骤1的具体步骤为:
步骤1-1:设计一个数据结构,该数据结构中包含了一个代表数据类型的元素和至少一个存储,所述存储用来实现所述六种基本类型;
步骤1-2:利用编程语言的特性将步骤1-1设计的结构体丰富,得到一个易用的数据类。
6.如权利要求5所述的跨平台的数据对象传输方法,其特征在于:所述将步骤1-1设计的结构体丰富是指:使结构体支持各种运算操作,使其更符合语义也更方便使用;
所述运算操作包括但不限于:加法运算,减法运算,赋值运算,数组索引操作符。
7.如权利要求1所述的跨平台的数据对象传输方法,其特征在于:步骤2的具体步骤为:
步骤2-1:准备一个二进制数据流;
步骤2-2:向前面准备好的流中写入一个4字节;
步骤2-3:读取VAR的类型,根据其值向二进制数据流中写入一个用于表达类型的字节,然后写入该VAR的值;
将步骤2-2中写入的4字节修改为步骤2-3为该VAR序列化得到的字节总数,现在就得到了一个能够展开为VAR的字符序列;
步骤2-4:步骤2-3得到了一个含有长度的字符序列,该序列己经可以简单地验证自身完整性了;
然后为该字符序列加入校验和、压缩加密等功能就得到了一个能够验证自身完整性并具有一定安全性可传输易存储能够还原为VAR的字节序列。
8.如权利要求8所述的跨平台的数据对象传输方法,其特征在于:步骤2-3中,写入该VAR的值有以下六种可能的情况:
符序列;其中,UTF8编码无BOM头字符串的长度占4字节;
情况2.VAR字典存储为一个4字节的映射对数目,然后依次将每一组键值对按照先键后值的顺序存储;
情况3.VAR整数存储为大端64位整数,占8个字节;
情况4.VAR浮点数存储为64位浮点数,占8个字节;
情况5.VAR数组存储为一个4字节的数组元素数目,然后该列表中的元素递归按步骤2-2进行存储;
情况6.VAR二进制字符串存储为4字节的数据长度和字节序列,与普通字符串的区别是不需要将其转换编码。
9.如权利要求1所述的跨平台的数据对象传输方法,其特征在于:步骤3的具体步骤为:
步骤3-1:在编程中,以VAR作为基本类型,用它替代所有需要跨平台使用的数据结构:对于C++语言通过重载运算符可以替代;对于Java和C#由于VAR子类型取材于语言本身,只要使用的数据类型可以转换为上述六中基本类型对应的类型即可;
步骤3-2:使用步骤2的方法将VAR转换为二进制字节数组,这时,VAR可以存储或传输,并且可以根据步骤2的方法从二进制字节数组在任意平台任意编程语言的模块中将该字节数组还原为该环境支持的VAR形态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611129496.8A CN106648817B (zh) | 2016-12-09 | 2016-12-09 | 一种跨平台的数据对象传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611129496.8A CN106648817B (zh) | 2016-12-09 | 2016-12-09 | 一种跨平台的数据对象传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106648817A true CN106648817A (zh) | 2017-05-10 |
CN106648817B CN106648817B (zh) | 2020-07-28 |
Family
ID=58825748
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611129496.8A Active CN106648817B (zh) | 2016-12-09 | 2016-12-09 | 一种跨平台的数据对象传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106648817B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971581A (zh) * | 2018-09-30 | 2020-04-07 | 北京国双科技有限公司 | 加密数据处理方法和装置 |
CN112153080A (zh) * | 2020-11-24 | 2020-12-29 | 山东富通信息科技有限公司 | 一种跨平台的视频数据的传输方法 |
CN112214516A (zh) * | 2020-10-29 | 2021-01-12 | 株洲中车时代电气股份有限公司 | 数据序列化和反序列化的方法及装置 |
CN112235316A (zh) * | 2020-11-06 | 2021-01-15 | 上海舜宇恒平科学仪器有限公司 | 一种仪器集成的数据通信方法 |
CN112738170A (zh) * | 2020-12-22 | 2021-04-30 | 北京讯腾智慧科技股份有限公司 | 一种基于ros的跨平台网络通信方法及系统 |
CN117498987A (zh) * | 2024-01-02 | 2024-02-02 | 南京元阵视界科技有限公司 | 一种应用于大规模网络数据传输的方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1246757A (zh) * | 1998-08-31 | 2000-03-08 | 国际商业机器公司 | 程序与用户之间交互的实现方法及其设备 |
CN1512332A (zh) * | 2002-12-31 | 2004-07-14 | ����̩ƽ | 自描述数据对象的处理方法 |
CN102571939A (zh) * | 2011-12-26 | 2012-07-11 | 广州市玄武无线科技有限公司 | 一种跨平台通信方法及系统 |
US8332539B2 (en) * | 2010-04-24 | 2012-12-11 | Sudharshan Srinivasan | Binary data serialization system using machine dependant data alignment |
CN102981884A (zh) * | 2012-11-22 | 2013-03-20 | 用友软件股份有限公司 | 序列化装置和序列化方法 |
US9465852B1 (en) * | 2007-08-02 | 2016-10-11 | Amazon Technologies, Inc. | Data format for processing information |
-
2016
- 2016-12-09 CN CN201611129496.8A patent/CN106648817B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1246757A (zh) * | 1998-08-31 | 2000-03-08 | 国际商业机器公司 | 程序与用户之间交互的实现方法及其设备 |
CN1512332A (zh) * | 2002-12-31 | 2004-07-14 | ����̩ƽ | 自描述数据对象的处理方法 |
US9465852B1 (en) * | 2007-08-02 | 2016-10-11 | Amazon Technologies, Inc. | Data format for processing information |
US8332539B2 (en) * | 2010-04-24 | 2012-12-11 | Sudharshan Srinivasan | Binary data serialization system using machine dependant data alignment |
CN102571939A (zh) * | 2011-12-26 | 2012-07-11 | 广州市玄武无线科技有限公司 | 一种跨平台通信方法及系统 |
CN102981884A (zh) * | 2012-11-22 | 2013-03-20 | 用友软件股份有限公司 | 序列化装置和序列化方法 |
Non-Patent Citations (1)
Title |
---|
王春凯 等: ""分布式数据流关系查询技术研究"", 《计算机学报》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110971581A (zh) * | 2018-09-30 | 2020-04-07 | 北京国双科技有限公司 | 加密数据处理方法和装置 |
CN110971581B (zh) * | 2018-09-30 | 2022-05-27 | 北京国双科技有限公司 | 加密数据处理方法和装置 |
CN112214516A (zh) * | 2020-10-29 | 2021-01-12 | 株洲中车时代电气股份有限公司 | 数据序列化和反序列化的方法及装置 |
CN112235316A (zh) * | 2020-11-06 | 2021-01-15 | 上海舜宇恒平科学仪器有限公司 | 一种仪器集成的数据通信方法 |
CN112153080A (zh) * | 2020-11-24 | 2020-12-29 | 山东富通信息科技有限公司 | 一种跨平台的视频数据的传输方法 |
CN112738170A (zh) * | 2020-12-22 | 2021-04-30 | 北京讯腾智慧科技股份有限公司 | 一种基于ros的跨平台网络通信方法及系统 |
CN117498987A (zh) * | 2024-01-02 | 2024-02-02 | 南京元阵视界科技有限公司 | 一种应用于大规模网络数据传输的方法 |
CN117498987B (zh) * | 2024-01-02 | 2024-03-15 | 南京元阵视界科技有限公司 | 一种应用于大规模网络数据传输的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106648817B (zh) | 2020-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648817A (zh) | 一种跨平台的数据对象传输方法 | |
US11526531B2 (en) | Dynamic field data translation to support high performance stream data processing | |
US10915664B2 (en) | Data masking systems and methods | |
CN104360865B (zh) | 一种序列化方法、反序列化方法及相关设备 | |
US10831773B2 (en) | Method and system for parallelization of ingestion of large data sets | |
CN111091876A (zh) | 一种dna存储方法、系统及电子设备 | |
WO2021258848A1 (zh) | 数据字典生成方法、数据查询方法、装置、设备及介质 | |
US8286148B2 (en) | System and method for managing long names in an application programming interface | |
US8902087B1 (en) | Data decompression utilizing pre-expanded dictionaries during decompression | |
CN105450232A (zh) | 编码、解码方法以及编码装置和解码装置 | |
CN103427844B (zh) | 一种基于gpu和cpu混合平台的高速无损数据压缩方法 | |
CN110827008A (zh) | 一种区块链节点和交易方法 | |
CN104731569B (zh) | 一种数据处理方法及相关设备 | |
CN104778182B (zh) | 基于HBase的数据导入方法和系统 | |
CN108268368A (zh) | 一种生成测试用例脚本的方法和装置 | |
CN116628066B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
WO2022088876A1 (zh) | 通信数据的处理方法、装置、设备及存储介质 | |
CN113835870A (zh) | 数据处理方法及系统 | |
CN106547911A (zh) | 一种海量小文件的存取方法和系统 | |
CN111259003B (zh) | 一种数据库建立方法及装置 | |
CN114372097B (zh) | 一种数据集列序列化的高效连接比对实现方法及装置 | |
CN109933589B (zh) | 用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法 | |
WO2021013047A1 (zh) | 一种文件管理方法及装置 | |
CN113905093A (zh) | 序列化、反序列化方法、装置及电子设备 | |
KR20080014737A (ko) | 패키징 모델의 컴포넌트와 패키지의 물리적 표현의 피처간의 매핑 방법 및 시스템 |
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 |