跨平台的字节序处理方法、装置和字节码运行平台的制作方法

文档序号:6579589阅读:138来源:国知局
专利名称:跨平台的字节序处理方法、装置和字节码运行平台的制作方法
技术领域
本发明涉及计算机网络领域,尤其涉及跨平台的字节序处理方法、装置和 字节码运行平台。
背景技术
字节码(bytecode)不同于通常情况下经过编译器编译后输出的目标代码,
意味着在一个平台生成的字节码可能在与生成该字节码的平台不同的平台上 运行,例如,对于嵌入式环境,为了节省嵌入式客户端执行解析、编译的时间 和所需的内存空间, 一种做法是将解析、编译从处理字节码的过程中抽离出来, 即,服务器预先对源代码进行解析和编译(称为"预编译"),客户端直接运行 服务器生成的字节码即可。由于服务器所在的平台可能与客户端所在的平台并 不相同,跨平台的字节码在处理过程中不可避免会遇到字节序(endianness) 的问题。
所谓字节序,是专门针对多个字节的数据类型而言,通俗的定义是大于一 个字节的数据类型在内存中的存放顺序。按照数据的高低字节在内存中的相对 位置,可以简单地将字节序分为大端字节序(Big Endianness)和小端字节序 (Little Endianness )。大端字节序指的是高位字节排放在内存的低地址端,低 位字节排放在内存的高地址端,小端字节序刚好与之相反,低位字节排放在内 存的低地址端,高位字节排放在内存的高地址端。
在现有技术中,当生成字节码的平台的字节序与运行该字节码的平台的字 节序不同时,例如,生成字节码的平台的字节序为大端字节序,运行该字节码 的平台的字节序为小端字节序,或者,生成字节码的平台的字节序为小端字节 序,运行该字节码的平台的字节序为大端字节序,如果生成的字节码直接在与 生成该字节码的平台不同的平台上运行,那么,这种处理方法显然只能得到一 个错误的运行结果。 发明内容本发明实施例提供跨平台的字节序处理方法和装置,解决现有技术处理表 示多字节数据的字节码时,在字节序不同的平台上直接运行字节码而导致结果 错误的问题。
本发明实施例提供的一种跨平台的字节序处理方法,包括 对表示多字节数据的字节码进行预处理,所述多字节数据包括第一类型数 据和第二类型数据,所述第一类型数据为16位整型数据或32位整型数据,所述 第二类型数据为64位整型数据、单精度浮点数据或双精度浮点数据;
若所述表示多字节数据的字节码经过预处理后转换成表示单字节数据的 字节码,则运行所述表示单字节数据的字节码,否则,按照预处理平台的字节 序和运行平台的字节序相同与否调整所述多字节数据的字节序以还原所述多 字节数据。
本发明实施例提供的一种跨平台的字节序处理装置,包括编译平台和运行 平台,所述编译平台和运行平台分立,其中,
所述编译平台包括预处理模块,用于对表示多字节数据的字节码进行预处 理,所述多字节数据包括第一类型数据和第二类型数据,第一类型数据为16 位整型数据或32位整型数据,所述第二类型数据为64位整型数据、单精度浮点 数据或双精度浮点数据;
所述运行平台包括执行模块,用于若所述表示多字节数据的字节码经过所 述预处理模块预处理后转换成表示单字节数据的字节码时,直接运行所述表示 单字节数据的字节码,否则,按照预处理平台的字节序和运行平台的字节序相 同与否调整所述多字节数据的字节序以还原所述多字节数据。
本发明实施例提供的一种跨平台的字节序处理方法,包括
对表示多字节数据的字节码进行预处理以得到表示单字节数据的字节码, 所述多字节数包括16位整型数据、32位整型数据、64位整形数据、单精度浮点 数据或双精度浮点数据;
运行所述表示单字节数据的字节码。
本发明实施例提供一种跨平台的字节序处理装置,包括编译平台和运行平 台,所述编译平台和运行平台分立,其中,所述编译平台包括预处理模块,用于对表示多字节数据的字节码进行预处
理以得到表示单字节数据的字节码,所述多字节数据包括16位整型数据、32 位整型数据、64位整形数据、单精度浮点数据或双精度浮点数据;
所述运行平台包括运行模块,用于运行经过所述预处理模块处理后得到的 表示单字节数据的字节码。
本发明实施例提供的一种跨平台的字节序处理方法,包括对表示多字节 数据的字节码进行预处理以使所述表示多字节数据的字节码中包含预处理平 台的字节序,所述多字节数包括16位整型数据、32位整型数据、64位整形数据、 单精度浮点数据或双精度浮点数据;
按照预处理平台的字节序和运行平台的字节序相同与否调整所述多字节 数据的字节序以还原所述多字节数据。
本发明实施例提供的一种跨平台的字节序处理装置,包括编译平台和运行 平台,所述编译平台和运行平台分立,其中,
所述编译平台包括预编译模块,用于对表示多字节数据的字节码进行预处 理以使所述表示多字节数据的字节码中包含预处理平台的字节序,所述多字节 数包括16位整型数据、32位整型数据、64位整形数据、单精度浮点数据或双精 度浮点数据;
所述运行平台包括调整模块,用于按照预处理平台的字节序和运行平台的 字节序相同与否调整经过所述预编译模块处理的多字节数据的字节序以还原 所述多字节数据。。
本发明实施例提供的一种字节码运行平台,包括
接收模块,用于接收表示多字节数据的字节码,所述字节码包含对所述字 节码进行预处理的预处理平台的字节序;
调整模块,用于按照运行平台的字节序和所述预处理平台的字节序相同与 否调整所述多字节数据的字节序以还原所述多字节数据。
在本发明实施例中,通过预处理平台的预处理以使表示多字节数据的字节 码分解成表示单字节数据的字节码或在表示多字节数据的字节码中添加预处 理平台的字节序,在运行平台直接运行所述表示单字节数据的字节码或将所述多字节数据的字节序调整为与所述运行平台的字节序相同。由于将表示多字节 数据的字节码分解成表示单字节数据的字节码,与现有技术相比,本发明实际 上规避了不同字节序的平台在运行同 一字节码时因字节序问题导致的错误,与 此同时,在运行平台将多字节数据的字节序调整到与运行平台的字节序相同, 可以将所述多字节数据正确保存于运行平台,便于后续正确使用所述多字节数 据。


图l是本发明实施例一提供的跨平台的字节序处理方法基本流程示意图; 图2A是本发明实施例二提供的预处理平台和运行平台的其中一种字节序 示意图2B是本发明实施例二提供的预处理平台和运行平台的其中一种字节序 示意图2C是本发明实施例二提供的预处理平台和运行平台的其中一种字节序 示意图3是本发明实施例三提供的跨平台的字节序处理方法基本流程示意图; 图4是本发明实施例四提供的跨平台的字节序处理方法基本流程示意图; 图5A是本发明实施例五提供的预处理平台和运行平台的其中 一种字节序 示意图5B是本发明实施例五提供的预处理平台和运行平台的其中一种字节序 示意图5C是本发明实施例五提供的预处理平台和运行平台的其中 一种字节序 示意图6是本发明实施例六提供的跨平台的字节序处理装置基本逻辑结构示意
图7是本发明实施例七提供的跨平台的字节序处理装置基本逻辑结构示意
图8是本发明实施例八提供的跨平台的字节序处理装置基本逻辑结构示意
10图9是本发明实施例九提供的 一种字节码运行平台基本逻辑结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造 性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实 施例提供跨平台的字节序处理方法和相应的跨平台的字节序处理装置。以下分 别进行详细说明。请参阅图1,本发明实施例一提供的跨平台的字节序处理方法基本流程,包括步骤S101,对表示多字节数据的字节码进行预处理。在本实施例中,可以将多字节数据分为第一类型数据和第二类型数据,第 一类型数据为16位整型数据或32位整型数据,第二类型数据为64位整型数据、 单精度浮点数据或双精度浮点数据。对表示多字节数据的字节码进行预处理包 括生成表示多字节数据的字节码;如果表示多字节数据的字节码是表示第一类 型数据的字节码,则对表示多字节数据的字节码进行预处理进一步包括将表示第一类型数据的字节码分解为表示单字节数据的字节码。分解的方法可以是对第一类型数据的二进制表示进行左右移位,例如,对 一个表示32位整型数据(用ival表示)的字节码分解为表示单字节数据的字节 码, 一种表示其分解方法的编译器编译代码如下*dst++ = (uint8) ((ival 24)&0xFF);*dst++ = (uint8) ((ival》16)&0xFF);*dst++ = (uint8) ((ival 8)&0xFF);*dst++ = (uint8) (ival&0xFF);上述代码基于C语言,本领域的技术人员可以理解其含义表示的方法,不 做赘述。对于表示第二类型数据的字节码,在平台的机器字长不是较长(例如,机器字长为16位或32位的平台),可以采取不同于表示第一类型数据的字节码的 预处理方法,包括生成表示第二类型数据的字节码,例如,生成一个表示64位整型数据(用 value表示)的字节码方法的编译器编译代码如下*dst++ = JSC_OP—CONST—INT64;sval=(char*)&value;for(j=0;j<8;j++){*dst++ = *sval++;上述代码基于C语言,本领域的技术人员可以理解其含义表示的方法,不 做赘述。之后进一步包括在表示第二类型数据的字节码中添加预处理平台的字节序。 在本发明实施例中,预处理平台可以是执行编译过程的服务器或生成表示 第二类型数据的字节码的平台。在表示第二类型数据的字节码中添加预处理平 台的字节序原因在于预处理平台的字节序可能与字节码运行平台的字节序不从而作出相应的操作。在表示第二类型数据的字节码中添加预处理平台的字节 序可以通过例如在表示第二类型数据的字节码中添加说明或标识预处理平台的字节序的一段代码、数值或一个参数来完成。步骤S102,若所述表示多字节数据的字节码经过预处理后转换成表示单字 节数据的字节码,则运行所述表示单字节数据的字节码,否则,按照预处理平 台的字节序和运行平台的字节序相同与否调整所述多字节数据的字节序以还 原所述多字节数据。如前所述,对于表示第一类型数据的字节码,在经过步骤S101的预处理后, 实际上分解成了多个表示单字节数据的字节码,例如, 一个表示16位整型数据 的字节码分解成2个表示单字节数据的字节码, 一个表示32位整型数据的字节码分解成4个表示单字节数据的字节码。由于字节序是针对多字节而言,因此, 可以直接运行所述表示单字节数据的字节码,还原多字节数据。例如,与步骤S101中表示32位整型数据(用ival表示)的字节码分解为表示单字节数据的字 节码相应, 一种还原32位整型数据的代码如下value = (uint32) ((pc
《24) | (pc[1]《16) | (pc[2]《8) | (pc[3]));pc[O]、 pc[l]、 pc[2]和pc[3]表示单字节数据,代码基于C语言,本领域的技 术人员可以理解其含义表示的方法,不做赘述。。从以上方案说明中可知,对于表示第一类型数据的字节码,由于在预处理 过程中就已经将表示多字节数据的字节码分解成了表示单字节数据的字节码; 而字节序是针对多字节而言,因此,与现有技术相比,本发明实施例规避了由 于平台的字节序不同而直接保存导致的字节序问题。对于表示第二类型数据的字节码,由于在其中添加了预处理平台的字节 序,在运行平台运行表示第二类型数据的字节码时,通过以下方式解决字节序 问题51021, 将表示第二类型数据的字节码直接复制到运行平台的内存中; 直接复制(例如,通过内存直接复制)意味着表示第二类型数据的字节码台的字节序是大端字节序,则表示第二类型数据的字节码直接复制到运行平台 的内存中时,其存放的方法应该是第二类型数据的高位字节存放于该段内存的 低地址内存单元,低位字节存放于该段内存的高地址内存单元,此时并不考虑 运行平台的字节序是大端字节序还是小端字节序。51022, 读取预处理平台的字节序;51023, 比较运行平台的字节序和所述预处理平台的字节序; 在本实施例中,运行平台为运行表示第二类型数据的字节码的平台,例如,虛拟机所在的平台、机顶盒或客户端等等。运行平台和预处理平台的分立意味 着两个平台的字节序可能不同,这是比较运行平台的字节序和所述预处理平台 的字节序的最直接原因。51024, 若所述运行平台的字节序和所述预处理平台的字节序相同,保持13所述第二类型数据的字节序,否则,调整所述第二类型数据的字节序以使所述 第二类型数据的字节序与所述运行平台的字节序相同。如前所述,字节序一般分为大端字节序和小端字节序,因此,比较的结果 和处理方法如下表一所示。预处理平台字节序运行平台字节序比较结果调整方案大端字节序大端字节序字节序相同不调整,直接使用大端字节序小端字节序字节序不同高低位对调小端字节序大端字节序字节序不同高低位对调小端字节序小端字节序字节序相同不调整,直接使用表一举例而言,若预处理平台(编译器所在平台)的字节序和运行平台(虚拟机所 在平台)的字节序都为大端字节序,且64位整型数据为F8F7F6F5F4F3F2F1构成(其中,Fi至Fs分别表示一个字节,且Fs最高位字节,Fi是最低位字节),那么,在 F8F7F6F5F4F3F2F1被直接复制到运行平台的内存中时,Fs已经存放在该段内存的 低地址内存单元,Fi已经存放在该段内存的高地址内存单元,如图2A所示,存 放方式与运行平台的大端字节序相符,因此,F8F7F6F5F4F3F2F1 在内存中的存放方式不需要调整,即,不需要调整F8F7F6F5F4F3F2F1的字节序。 而若预处理平台(编译器所在平台)的字节序和运行平台(虚拟机所在平 台)的字节序不同,例如,预处理平台的字节序为小端字节序,运行平台的字 节序为大端字节序,64位整型数据为F8F7F6F5F4F3F2F1构成(其中,Fi至Fs分别 表示一个字节,且Fs最高位字节,Fi是最低位字节),即,F8F7F6F5F4F3F2F1在 预处理平台的内存中的存放方式为Fs存放在存一段内存的高地址内存单元, Fi存放在该段内存的低地址内存单元。当F8F7F6F5F4F3F2F1被直接复制到运行平台的内存中时,F8F7F6F5F4F3F2Fl在运4亍平台的内存中的存方文方式仍然为F8存放在运行平台 一段内存的高地址内存单元,Fi存放在该段内存的低地址内存 单元,如图2B所示。这种存放方式显然与运行平台的大端字节序不符,因此, 需要对F8F7F6FsF4F3F2F1在内存中的存放方式作出调整,调整方式是将Fs存放在一段内存的低地址内存单元,Fl存放在该段内的高地址内存单元,如图2C所示, 经过字节序调整后,F8F7F6F5F4F3F2Fl的字节序与所述运行平台的字节序相同, 才算是将F8F7F6F5F4F3F2Fl还原,在后续使用F8F7F6F5F4F3F2Fl时才不致出4晉。
当然,对于机器字长比较长的平台(例如,机器字长为64位的平台),可 以采用本发明实施例三提供的跨平台的字节序处理方法,基本流程请参阅图3, 包括
步骤S301,对表示多字节数据的字节码进行预处理以得到表示单字节数据 的字节码。
在本实施例中,多字节数据包括16位整型数据、32位整型数据、64位整形 数据、单精度浮点数据或双精度浮点数据。
对表示多字节数据的字节码进行预处理包括 生成表示多字节数据的字节码;
将表示多字节数据的字节码分解为表示单字节数据的字节码。 分解的方法可以是对多字节数据的二进制表示进行左右移位,例如,对一
个表示64位整型数据(用ival表示)的字节码分解为表示单字节数据的字节码,
一种表示其分解方法的编译器编译代码如下
*dst++ =(uint8)((ival》56)&0xFF)
*dst++ =(uint8)((ival 48)&0xFF)
*dst++ =(uint8)((ival》40)&0xFF)
*dst++ =(uint8)((ival 32)&0xFF)
*dst++ =(uint8)((ival 24)&0xFF)
*dst++ =(uint8)((ival》16)綠FF)
*dst++ =(uint8)((ival》8)綠FF);
*dst++ =(uint8)(ival綠FF);
上述代码基于c语言,本领域的技术人员可以理解其含义表示的方法,不
做赘述。
步骤S302,运行所述表示单字节数据的字节码。
在经过步骤S101的预处理后,实际上分解成了多个表示单字节数据的字节码,例如, 一个表示32位整型数据的字节码分解成4个表示单字节数据的字节 码, 一个表示64位整型数据的字节码分解成8个表示单字节数据的字节码。由 于字节序是针对多字节而言,因此,可以直接运行所述表示单字节数据的字节 码,还原多字节数据。例如,与步骤S301中表示64位整型数据(用ival表示) 的字节码分解为表示单字节数据的字节码相应, 一种还原64位整型数据的代码 ^口下
value = (uint32) ((pc
《56) | (pc[1]《48) | (pc[2]《40) | (pc[3]《32) | (pc[4]《24) I (pc[5]《16) I (pc[6]《8) | (pc[7]));
pc[O]、 pc[l]、 pc[2]、 pc[3]、 pc[4]、 pc[5]、 pc[6]和pc[7]表示单字节数据, 代码基于C语言,本领域的技术人员可以理解其含义表示的方法,不做赘述。
从以上方案说明中可知,对于表示多字节数据的字节码,由于在预处理过 程中就已经将表示多字节数据的字节码分解成了表示单字节数据的字节码;而 字节序是针对多字节而言,因此,与现有技术相比,本发明实施例规避了由于 平台的字节序不同而直接保存导致的字节序问题。
对于平台的机器字长不是较长(例如,机器字长为16位或32位的平台), 还可以采用本发明实施例四提供的跨平台的字节序处理方法,基本流程请参阅 图4,包括
步骤S401,对表示多字节数据的字节码进行预处理以使所述表示多字节数 据的字节码中包含预处理平台的字节序。
在本实施例中,多字节数包括16位整型数据、32位整型数据、64位整形数 据、单精度浮点数据或双精度浮点数据。对表示多字节数据的字节码进行预处 理包括
生成表示表示多字节数据的字节码,例如,生成一个表示64位整型数据(用 value表示)的字节码方法的编译器编译代码如下 *dst++ = JSC—OP—CONST—INT64; sval=(char*)&value; for(j=0;j<8;j++){
*dst++ = *sval++;上述代码基于C语言,本领域的技术人员可以理解其含义表示的方法,不 做赘述。
之后进一步包括
在表示多字节数据的字节码中添加预处理平台的字节序。 在本发明实施例中,预处理平台可以是执行编译过程的服务器或生成表示 多字节数据的字节码的平台。在表示多字节数据的字节码中添加预处理平台的 字节序原因在于预处理平台的字节序可能与字节码运行平台的字节序不同,
作出相应的操作。在表示多字节数据的字节码中添加预处理平台的字节序可以
的一段代码、数值或一个参数来完成。
述多字节数据的字节序以还原所述多字节数据。
对于表示多字节数据的字节码,由于在其中添加了预处理平台的字节序, 在运行平台运行表示多字节数据的字节码时,通过以下方式解决字节序问题
54021, 将表示多字节数据的字节码直接复制到运行平台的内存中。 直接复制(例如,通过内存直接复制)意味着表示多字节数据的字节码在
的字节序是大端字节序,则表示多字节数据的字节码直接复制到运行平台的内 存中时,其存放的方法应该是多字节数据的高位字节存放于该段内存的低地址
内存单元,低位字节存放于该段内存的高地址内存单元,此时并不考虑运行平 台的字节序是大端字节序还是小端字节序。
54022, 读取预处理平台的字节序。
54023, 比较运行平台的字节序和所述预处理平台的字节序。 在本实施例中,运行平台为运行表示多字节数据的字节码的平台,例如,
虚拟机所在的平台、机顶盒或客户端等等。运行平台和预处理平台的分立意味 着两个平台的字节序可能不同,这是比较运行平台的字节序和所述预处理平台的字节序的最直接原因。
S4024,若所述运行平台的字节序和所述预处理平台的字节序相同,保持 所述多字节数据字节序,否则,调整所述多字节数据的字节序以使所述多字节 数据的字节序与所述运行平台的字节序相同。
如前所述,字节序一般分为大端字节序和小端字节序,因此,比4交的结果 和处理方法如下表二所示。
预处理平台字节序运行平台字节序比较结果调整方案
大端字节序大端字节序字节序相同不调整,直接使用
大端字节序小端字节序字节序不同高低位对调
小端字节序大端字节序字节序不同高低位对调
小端字节序小端字节序字节序相同不调整,直4t使用
表二
举例而言,若预处理平台(编译器所在平台)的字节序和运行平台(虚拟 机所在平台)的字节序都为大端字节序,且64位整型数据为F8F7F6F5F4F3F2F1
构成(其中,Fi至Fs分别表示一个字节,且F8最高位字节,Fi是最低位字节), 那么,在F8F7F6F5F4F3F2F1被直接复制到运行平台的内存中时,Fs已经存放在该 段内存的低地址内存单元,Fi已经存放在该段内存的高地址内存单元,如图5 的图5A所示,存放方式与运行平台的大端字节序相符,因此,F8F7F6F5F4F3F2F1 在内存中的存放方式不需要调整,即,不需要调整F8F7F6F5F4F3F2F1的字节序。 而若预处理平台(编译器所在平台)的字节序和运行平台(虚拟机所在平 台)的字节序不同,例如,预处理平台的字节序为小端字节序,运行平台的字 节序为大端字节序,64位整型数据为F8F7F6F5F4F3F2F1构成(其中,Fi至Fs分别 表示一个字节,且Fs最高位字节,Fi是最低位字节),即,F8F7F6F5F4F3F2F1在 预处理平台的内存中的存放方式为Fs存放在存一段内存的高地址内存单元, Fi存放在该段内存的低地址内存单元。当F8F7F6F5F4F3F2F1被直接复制到运行平 台的内存中时,F8F7F6F5F4F3F2F1在运行平台的内存中的存放方式仍然为Fs 存放在运行平台一段内存的高地址内存单元,Fi存放在该段内存的低地址内存
18因此,需要对F8F7F6FsF4F3F2Fi在内存中的存放方式作出调整,调整方式是将Fs 存放在一段内存的低地址内存单元,Fi存放在该段内的高地址内存单元,如图 5的图5C所示,经过字节序调整后,才算是将F8F7F6F5F4F3F2F1还原,在后续使 用时才不致出错。
请参阅图6,本发明实施例六提供的跨平台的字节序处理装置基本逻辑结 构示意图,该跨平台的字节序处理装置与本发明实施例一提供的if争平台的字节 序处理方法相应。为了便于说明,仅示出了与本发明实施例相关的部分。该装 置包括分立的预处理平台61和运行平台62,其中
预处理平台61包括预处理模块611,用于对表示多字节数据的字节码进行 预处理,其包括
字节码生成单元6111,用于生成所述表示多字节数据的字节码;
第一预处理单元6112,用于将所述字节码生成单元6111生成的表示第一类 型数据的字节码分解为表示单字节数据的字节码;
第二预处理单元6113,用于在所述字节码生成单元6111生成的表示第二类 型数据的字节码中添加预处理平台61的字节序,所述预处理平台61为生成所述 表示第二类型数据的字节码的平台或编译平台;
其中,多字节数据包括第一类型数据和第二类型数据,第一类型数据为16 位整型数据或32位整型数据,所述第二类型数据为64位整型数据、单精度浮点 数据或双精度浮点数据。
运行平台62包括执行模块621,用于若所述表示多字节数据的字节码经过 所述预处理模块预处理后转换成表示单字节数据的字节码时,直接运行所述表 示单字节数据的字节码,否则,按照预处理平台61的字节序和运行平台62的字
节序相同与否调整所述多字节数据的字节序以还原所述多字节数据。执行模块 621包括
第 一执行单元6211,用于运行所述第 一预处理单元6112分解后的单字节数 据的字节码;
第二执行单元6212,用于将表示第二类型数据的字节码直接复制到运行平台的内存中后,读取所述第二预处理单元6113添加的预处理平台61的字节序并
比较所述运行平台62的字节序和所述预处理平台61的字节序,在所述预处理平 台61的字节序和所述运行平台62的字节序相同时,保持所述第二类型数据的字 节序,在所述预处理平台61的字节序和所述运行平台62的字节序不同时,调整 所述第二类型数据的字节序以使所述第二类型数据的字节序与所述运行平台 62的字节序相同。
预处理模块611及其包含的字节码生成单元6111、第一预处理单元6112、 第二预处理单元6113和执行模块621及其包含的第 一执行单元6211 、第二执行 单元6212的功能或运作已在前文相应的方法实施例中说明,此处不再赘述。
从以上方案说明中可知,对于表示第一类型数据的字节码,由于在预处理 过程中就已经将表示多字节数据的字节码分解成了表示单字节数据的字节码; 而字节序是针对多字节而言,因此,与现有技术相比,本发明实施例规避了由 于平台的字节序不同而直接保存导致的字节序问题。对于表示第二类型数据的 字节码,通过在运行平台端调整第二类型数据的字节序,使得第二类型数据的 字节序与所述运行平台的字节序相同,如此,在后续使用第二类型数据不会因
为字节序的问题而出错。
请参阅图7,本发明实施例七提供的跨平台的字节序处理装置基本逻辑结 构示意图,该跨平台的字节序处理装置与本发明实施例二提供的跨平台的字节 序处理方法相应。为了便于说明,仅示出了与本发明实施例相关的部分。该装 置包括分立的预处理平台71和运行平台72,其中
预处理平台71包括预处理模块711,用于对表示多字节数据的字节码进行 预处理,所述多字节数据包括16位整型数据、32位整型数据、64位整形数据、 单精度浮点数据或双精度浮点数据。预处理模块711包括
字节码生成单元7111,用于生成所述表示多字节数据的字节码;
分解单元7112,用于将所述字节码生成单元7111生成的表示多字节数据的 字节码分解为多个表示单字节数据的字节码。
运行平台72包括运行模块721,用于运行经过所述预处理模块处理后得到 的表示单字节数据的字节码。预处理模块711及其包含的字节码生成单元7111、分解单元7112和运行模 块721的功能或运作已在前文相应的方法实施例中说明,此处不再赘述。
从以上方案说明中可知,对于表示多字节数据的字节码,由于在预处理过 程中就已经将表示多字节数据的字节码分解成了表示单字节数据的字节码;而 字节序是针对多字节而言,因此,与现有技术相比,本发明实施例规避了由于 平台的字节序不同而直接保存导致的字节序问题。
请参阅图8,本发明实施例八提供的跨平台的字节序处理装置基本逻辑结 构示意图,该跨平台的字节序处理装置与本发明实施例三提供的跨平台的字节 序处理方法相应。为了便于说明,仅示出了与本发明实施例相关的部分。该装 置包括分立的预处理平台81和运行平台82,其中
预处理平台81包括预编译模块811,用于对表示多字节数据的字节码进行 预处理以使所述表示多字节数据的字节码中包含预处理平台81的字节序,所述 多字节数包括16位整型数据、32位整型数据、64位整形数据、单精度浮点数据 或双精度浮点数据。预编译^t块811包括
字节码生成单元8111,用于生成所述表示多字节数据的字节码;
预处理单元8112,用于在所述字节码生成单元8111生成的表示多字节数据 的字节码中添加预处理平台的字节序,所述预处理平台81为与所述运行平台82
运行平台82包括调整模块821 ,用于按照预处理平台81的字节序和运行平 台82的字节序相同与否调整所述预编译模块处理的多字节数据的字节序以还 原所述多字节数据。其包括
执行单元8211,用于将所述表示多字节数据的字节码直接复制到运行平台 82的内存中,读取所述预处理单元8112添加的预处理平台81的字节序并比较所 述运行平台82的字节序和所述预处理平台81的字节序,在所述预处理平台81 的字节序和所述运行平台82的字节序相同时,保持所述多字节数据的字节序, 在所述预处理平台81的字节序和所述运行平台82的字节序不同时,调整所述多 字节数据的字节序以使所述多字节数据的字节序与所述运行平台82的字节序 相同。
21预编译模块811及其包含的字节码生成单元8111、预处理单元8112和调整
模块821及其包含的执行单元8211的功能或运作已在前文相应的方法实施例中 说明,此处不再赘述。
由以上方案的说明可知,对于多字节数据的字节码,通过在运行平台端调 整多字节数据的字节序,使得多字节数据的字节序与所述运行平台的字节序相 同,如此,在后续使用多字节数据不会因为字节序的问题而出错。
请参阅图9,本发明实施例九提供的 一种字节码运行平台基本逻辑结构示 意图,为了便于说明,仅示出了与本发明实施例相关的部分。该字节码运行平 台包括
接收模块901,用于接收表示多字节数据的字节码,所述字节码包含对所 述字节码进行预处理的预处理平台的字节序;
调整模块902,用于按照运行平台的字节序和所述预处理平台的字节序相 同与否调整所述多字节数据的字节序以还原所述多字节数据,其包括
执行单元9021,用于将所述表示多字节数据的字节码直接复制到运行平台 的内存中,读取所述接收模块901接收的预处理平台的字节序并比较所述运行 平台的字节序和所述预处理平台的字节序,在所述预处理平台的字节序和所述 运行平台的字节序相同时,保持所述多字节数据的字节序,在所述预处理平台 的字节序和所述运行平台的字节序不同时,调整所述多字节数据的字节序以使 所述多字节数据的字节序与所述运行平台的字节序相同。
由以上方案的说明可知,对于多字节数据的字节码,通过在运行平台端调 整多字节数提的字节序,使得多字节数据的字节序与所述运行平台的字节序相 同,如此,在后续使用多字节数据不会因为字节序的问题而出错。
骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读 存储介质中,存储介质可以包括只读存储器(ROM, Read Only Memory )、 随机存取存储器(RAM, Random Access Memory )、磁盘或光盘等。
以上对本发明实施例所提供的跨平台的字节序处理方法和装置进行了详实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领 域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有 改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1、一种跨平台的字节序处理方法,其特征在于,包括对表示多字节数据的字节码进行预处理,所述多字节数据包括第一类型数据和第二类型数据,所述第一类型数据为16位整型数据或32位整型数据,所述第二类型数据为64位整型数据、单精度浮点数据或双精度浮点数据;若所述表示多字节数据的字节码经过预处理后转换成表示单字节数据的字节码,则运行所述表示单字节数据的字节码,否则,按照预处理平台的字节序和运行平台的字节序相同与否调整所述多字节数据的字节序以还原所述多字节数据。
2、 如权利要求l所述跨平台的字节序处理方法,其特征在于,所述对所述表示多字节数据的字节码进行预处理包括 生成表示多字节数据的字节码;将所述表示第一类型数据的字节码分解为表示单字节数据的字节码。
3、 如权利要求2所述跨平台的字节序处理方法,其特征在于,还包括 在所述表示第二类型数据的字节码中添加预处理平台的字节序,所述预处理平台为生成所述表示第二类型数据的字节码的平台。
4、 如权利要求3所述跨平台的字节序处理方法,其特征在于,所述按照预 处理平台的字节序和运行平台的字节序相同与否调整所述多字节数据的字节 序以还原所述多字节数据包括将表示第二类型数据的字节码直接复制到运行平台的内存中; 读取所述预处理平台的字节序;比较所述运行平台的字节序和所述预处理平台的字节序; 若所述运行平台的字节序和所述预处理平台的字节序相同,保持所述第二类型数据的字节序,否则,调整所述第二类型数据的字节序以使所述第二类型数据的字节序与所述运行平台的字节序相同。
5、 一种跨平台的字节序处理装置,包括编译平台和运行平台,其特征在 于,所述预处理平台和运行平台分立,其中,所述预处理平台包括预处理模块,用于对表示多字节数据的字节码进行预 处理,所述多字节数据包括第一类型数据和第二类型数据,第一类型数据为16位整型数据或32位整型数据,所述第二类型数据为64位整型数据、单精度浮点 数据或双精度浮点数据;所述运行平台包括执行模块,用于若所述表示多字节数据的字节码经过所 述预处理模块预处理后转换成表示单字节数据的字节码时,直接运行所述表示 单字节数据的字节码,否则,按照预处理平台的字节序和运行平台的字节序相 同与否调整所述多字节数据的字节序以还原所述多字节数据。
6、 如权利要求5所述跨平台的字节序处理装置,其特征在于,所述预处理 模块包括字节码生成单元,用于生成所述表示多字节数据的字节码; 第一预处理单元,用于将所述字节码生成单元生成的表示第一类型数据的字节码分解为表示单字节数据的字节码第二预处理单元,用于在所述字节码生成单元生成的表示第二类型数据的字节码中添加预处理平台的字节序,所述预处理平台为生成所述表示第二类型数据的字节码的平台或编译平台。
7、 如权利要求6所述跨平台的字节序处理装置,其特征在于,所述执行模 块包括第 一执行单元,用于运行所述第 一预处理单元分解后的单字节数据的字节码;第二执行单元,用于将表示第二类型数据的字节码直接复制到运行平台的 内存中后,读取所述第二预处理单元添加的预处理平台的字节序并比较所述运 行平台的字节序和所述预处理平台的字节序,在所述预处理平台的字节序和所 述运行平台的字节序相同时,保持所述第二类型数据的字节序,在所述预处理 平台的字节序和所述运行平台的字节序不同时,调整所述第二类型数据的字节 序以使所述第二类型数据的字节序与所述运行平台的字节序相同。
8、 一种跨平台的字节序处理方法,其特征在于,包括 对表示多字节数据的字节码进行预处理以得到表示单字节数据的字节码,所述多字节数包括16位整型数据、32位整型数据、64位整形数据、单精度浮点 数据或双精度浮点数据;运行所述表示单字节数据的字节码。
9、 如权利要求8所述跨平台的字节序处理方法,其特征在于,所述对表示多字节数据的字节码进行预处理以得到表示单字节数据的字节码具体为 生成所述表示多字节数据的字节码;将所述表示多字节数据的字节码分解为多个表示单字节数据的字节码。
10、 一种跨平台的字节序处理装置,包括预处理平台和运行平台,其特征 在于,所述预处理平台和运行平台分立,其中,所述预处理平台包括预处理模块,用于对表示多字节数据的字节码进行预 处理以得到表示单字节数据的字节码,所述多字节数据包括16位整型数据、32 位整型数据、64位整形数据、单精度浮点数据或双精度浮点数据;所述运行平台包括运行模块,用于运行经过所述预处理模块处理后得到的 表示单字节数据的字节码。
11、 如权利要求10所述跨平台的字节序处理装置,其特征在于,所述预处 理模块包括字节码生成单元,用于生成所述表示多字节数据的字节码; 分解单元,用于将所述字节码生成单元生成的表示多字节数据的字节码分 解为多个表示单字节数据的字节码。
12、 一种跨平台的字节序处理方法,其特征在于,包括 对表示多字节数据的字节码进行预处理以使所述表示多字节数据的字节码中包含预处理平台的字节序,所述多字节数包括16位整型数据、32位整型数 据、64位整形数据、单精度浮点数据或双精度浮点数据;按照预处理平台的字节序和运行平台的字节序相同与否调整所述多字节 数据的字节序以还原所述多字节数据。
13、 如权利要求12所述跨平台的字节序处理方法,其特征在于,所述对表 示多字节数据的字节码进行预处理包括生成所述表示多字节数据的字节码;在所述表示多字节数据的字节码中添加预处理平台的字节序。
14、 如权利要求13所述跨平台的字节序处理方法,其特征在于,所述按照预处理平台的字节序和运行平台的字节序相同与否调整所述多字节数据的字节序以还原所述多字节数据包括将所述表示多字节数据的字节码直接复制到运行平台的内存中;读取所述预处理平台的字节序;比较所述运行平台的字节序和所述预处理平台的字节序,所述运行平台为运行所述表示表示多字节数据的字节码的平台;若所述运行平台的字节序和所述预处理平台的字节序相同,保持所述多字 节数据的字节序,否则,调整所述多字节数据的字节序以使所述多字节数据的 字节序与所述运行平台的字节序相同。
15、 一种跨平台的字节序处理装置,包括预处理平台和运行平台,其特征 在于,所述预处理平台和运行平台分立,其中,所述预处理平台包括预编译模块,用于对表示多字节数据的字节码进行预 处理以使所述表示多字节数据的字节码中包含预处理平台的字节序,所述多字 节数包括16位整型数据、32位整型数据、64位整形数据、单精度浮点数据或双 精度浮点数据;所述运行平台包括调整模块,用于按照预处理平台的字节序和运行平台的 字节序相同与否调整经过所述预编译模块处理的多字节数据的字节序以还原 所述多字节数据。
16、 如权利要求15所述跨平台的字节序处理装置,其特征在于,所述预编 译模块包括字节码生成单元,用于生成所述表示多字节数据的字节码;预处理单元,用于在所述字节码生成单元生成的表示多字节数据的字节码中添加预处理平台的字节序,所述预处理平台为与所述运行平台分立的编译平台或生成所述表示多字节数据的字节码的平台。
17、 如权利要求16所述跨平台的字节序处理装置,其特征在于,所述调整 模块包括执行单元,用于将所述表示多字节数据的字节码直接复制到运行平台的内 存中,读取所述预处理单元添加的预处理平台的字节序并比较所述运行平台的字节序和所述预处理平台的字节序,在所述预处理平台的字节序和所述运行平 台的字节序相同时,保持所述多字节数据的字节序,在所述预处理平台的字节 序和所述运行平台的字节序不同时,调整所述多字节数据的字节序以使所述多字节数据的字节序与所述运行平台的字节序相同。
18、 一种字节码运行平台,其特征在于,包括接收模块,用于接收表示多字节数据的字节码,所述字节码包含对所述字节码进行预处理的预处理平台的字节序;调整模块,用于按照运行平台的字节序和所述预处理平台的字节序相同与 否调整所述多字节数据的字节序以还原所述多字节数据。
19、 如权利要求18所述字节码运行平台,其特征在于,所述调整模块包括: 执行单元,用于将所述表示多字节数据的字节码直接复制到运行平台的内节序和所述预处理平台的字节序,在所述预处理平台的字节序和所述运行平台的字节序相同时,保持所述多字节数据的字节序,在所述预处理平台的字节序 和所述运行平台的字节序不同时,调整所述多字节数据的字节序以使所述多字节数据的字节序与所述运行平台的字节序相同。
全文摘要
本发明实施例提供一种跨平台的字节序处理方法,以解决处理表示多字节数据的字节码时在字节序不同的平台上直接运行字节码而导致结果错误的问题。该方法包括对表示多字节数据的字节码进行预处理;若所述表示多字节数据的字节码经过预处理后转换成表示单字节数据的字节码,则运行所述表示单字节数据的字节码,否则,按照预处理平台的字节序和运行平台的字节序相同与否调整所述多字节数据的字节序以还原所述多字节数据。本发明规避了不同字节序的平台在运行同一字节码时因字节序问题导致的错误,与此同时,在运行平台将多字节数据的字节序调整到与运行平台的字节序相同,可以将所述多字节数据正确保存于运行平台,便于后续正确使用所述多字节数据。
文档编号G06F9/45GK101645017SQ20091016194
公开日2010年2月10日 申请日期2009年9月7日 优先权日2009年9月7日
发明者徐佳宏, 朱吕亮, 程伯钦 申请人:深圳市茁壮网络股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1