一种跨平台的数据对象传输方法与流程

文档序号:11154565阅读:605来源:国知局
一种跨平台的数据对象传输方法与制造工艺

本发明涉及软件开发技术领域,具体说是一种跨平台的数据对象传输方法。



背景技术:

在现有的软件开发中,不同的软件模块之间相互协作通常会借助进程间通信。在诸多进程间通信技术中,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可以模拟结构体,所以也可以用结构体的方式进行文档编写,这种文档可以利用文档生成工具将结构的注释生成为文档。对比通信协议文档需要考虑数据的存储结构和各个版本的差异,描写数据结构的文档显然更容易维护。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1