CN109388406A - 转换java代码的方法及装置、存储介质、电子装置 - Google Patents
转换java代码的方法及装置、存储介质、电子装置 Download PDFInfo
- Publication number
- CN109388406A CN109388406A CN201811075421.5A CN201811075421A CN109388406A CN 109388406 A CN109388406 A CN 109388406A CN 201811075421 A CN201811075421 A CN 201811075421A CN 109388406 A CN109388406 A CN 109388406A
- Authority
- CN
- China
- Prior art keywords
- schema
- java code
- type
- attribute
- data class
- 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
-
- 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/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种转换java代码的方法及装置、存储介质、电子装置,其中,该方法包括:加载java代码的数据类;查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;根据所述类型将所述java代码的数据类生成avro的schema。通过本发明,解决了相关技术中不能将java代码转换为schema的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种转换java代码的方法及装置、存储介质、电子装置。
背景技术
Avro是Hadoop(一种大数据开发语言)中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件,Avro依赖于模式Schema,通过模式定义各种数据结构,只有确定了模式才能对数据进行解释,所以在数据的序列化和反序列化之前,必须先确定模式的结构,需要生成Schema。
相关技术中,研发使用的工具都只支持将java代码转换为C语言等,如公开号为CN104463002A的申请文件中,公开了一种将Java代码转换成相应的反射调用的Native C代码的方案,相关技术中的方案并不能将java代码转换为schema,而一般的java代码都是直接用数据模型工具生成,编辑相对简单,如果需要编辑端和端约定的schema,工作量重复,并且由于目前缺少schema的语法检查器,导致人工编写缓慢,而且容易出错。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
本发明实施例提供了一种转换java代码的方法及装置、存储介质、电子装置。
根据本发明的一个实施例,提供了一种转换java代码的方法,包括:加载java代码的数据类;查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;根据所述类型将所述java代码的数据类生成avro的schema。
可选的,根据所述类型将所述java代码的数据类生成avro的schema包括:判断所述数据类是否包括复杂类型的属性;在所述数据类包括复杂类型的属性时,将所述复杂类型的属性转换为简单类型的属性,使用简单类型的属性生成avro的schema;在所述数据类不包括复杂类型的属性时,使用简单类型的属性生成avro的schema。
可选的,将所述复杂类型的属性转换为简单类型的属性包括:拆分所述复杂类型的属性,得到所述复杂类型的属性所包含的多个子属性,其中,所述子属性的类型为简单类型。
可选的,根据所述类型将所述java代码的数据类生成avro的schema包括:将java代码的数据类映射为schema中的映射项;使用所述映射项拼装成avro的schema。
可选的,将java代码的数据类映射为schema中的映射项包括:将所述java代码的数据类映射为schema中的record类型,将数组映射成array,将字典结果映射为map,其中,所述数据类包含所述数组和所述字典结果。
可选的,将java代码的数据类映射为schema中的映射项包括:将java代码的null映射为schema中的空字符串;将java代码的boolean值映射为schema中的bool和booleanint;将java代码的32位有符号整数映射为schema中的intlong;将java代码的64位有符号整数映射为schema中的longfloat;将java代码的单精度IEEE 754浮点数映射为schema中的float double;将java代码的双精度的IEEE 754浮点数映射为schema中的double bytes;将java代码的8位无符号字节序列映射为schema中的byte string;将java代码的字符串映射为schema中的string;将java代码的枚举映射为schema中的enum。
可选的,查看所述数据类的所有属性包括:在所述java代码的运行状态下,通过java的反射机制查看所述数据类的所有属性。
可选的,获取每个属性所属的类型包括:调用反射函数获取每个属性所属的类型。
可选的,在根据所述类型将所述java代码的数据类生成avro的schema之后,所述方法还包括:在第一设备上设置所述schema;接收第二设备发送的数据;使用所述schema还原所述数据的key。
可选的,在加载java代码的数据类之前,所述方法还包括:编辑所述java代码,或者,获取所述java代码。
根据本发明的另一个实施例,提供了一种转换java代码的装置,包括:加载模块,用于加载java代码的数据类;处理模块,用于查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;生成模块,用于根据所述类型将所述java代码的数据类生成avro的schema。
可选的,所述生成模块包括:判断单元,用于判断所述数据类是否包括复杂类型的属性;第一生成单元,用于在所述数据类包括复杂类型的属性时,将所述复杂类型的属性转换为简单类型的属性,使用简单类型的属性生成avro的schema;第二生成单元,用于在所述数据类不包括复杂类型的属性时,使用简单类型的属性生成avro的schema。
可选的,所述第一生成单元还用于:拆分所述复杂类型的属性,得到所述复杂类型的属性所包含的多个子属性,其中,所述子属性的类型为简单类型。
可选的,所述生成模块包括:映射单元,用于将java代码的数据类映射为schema中的映射项;拼装单元,用于使用所述映射项拼装成avro的schema。
可选的,所述映射单元包括:映射子单元,用于将所述java代码的数据类映射为schema中的record类型,将数组映射成array,将字典结果映射为map,其中,所述数据类包含所述数组和所述字典结果。
可选的,所述映射单元还用于:将java代码的null映射为schema中的空字符串;将java代码的boolean值映射为schema中的bool和booleanint;将java代码的32位有符号整数映射为schema中的intlong;将java代码的64位有符号整数映射为schema中的longfloat;将java代码的单精度IEEE 754浮点数映射为schema中的float double;将java代码的双精度的IEEE 754浮点数映射为schema中的double bytes;将java代码的8位无符号字节序列映射为schema中的byte string;将java代码的字符串映射为schema中的string;将java代码的枚举映射为schema中的enum。
可选的,所述处理模块包括:查看单元,用于在所述java代码的运行状态下,通过java的反射机制查看所述数据类的所有属性。
可选的,所述处理模块包括:获取单元,用于调用反射函数获取每个属性所属的类型。
可选的,所述装置还包括:设置模块,用于在所述生成模块根据所述类型将所述java代码的数据类生成avro的schema之后,在第一设备上设置所述schema;接收模块,用于接收第二设备发送的数据;还原模块,用于使用所述schema还原所述数据的key。
可选的,所述装置还包括:预处理模块,用于在所述加载模块加载java代码的数据类之前,编辑所述java代码,或者,获取所述java代码。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,通过查看和获取java代码的数据类的每个属性所属的类型,把java数据类型的代码类直接转换成可供其他端使用的schema,同时可以直接帮助工程师跳过schema隐晦的编写,解决了相关技术中不能将java代码转换为schema的技术问题,实现了java对schema输出的补充,能改变java端一直被动等待其他端输出schema的局面,提高了程序员的代码编写效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种转换java代码的移动终端的硬件结构框图;
图2是根据本发明实施例的转换java代码的方法的流程图;
图3是本发明实施例的生成schema的流程图;
图4是根据本发明实施例的转换java代码的终端的结构框图;
图5是根据本发明实施例的服务器的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种转换java代码的移动终端的硬件结构框图。如图1所示,移动终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的转换java代码的方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于终端或服务器的转换java代码的方法,图2是根据本发明实施例的转换java代码的方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,加载java代码的数据类;
步骤S204,查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
步骤S206,根据所述类型将所述java代码的数据类生成avro的schema。
使用上述方法,通过查看和获取java代码的数据类的每个属性所属的类型,把java数据类型的代码类直接转换成可供其他端使用的schema,同时可以直接帮助工程师跳过schema隐晦的编写,解决了相关技术中不能将java代码转换为schema的技术问题,实现了java对schema输出的补充,能改变java端一直被动等待其他端输出schema的局面,提高了程序员的代码编写效率。
在本实施例中,查看所述数据类的所有属性包括:在所述java代码的运行状态下,通过java的反射机制查看所述数据类的所有属性。获取每个属性所属的类型包括:调用反射函数获取每个属性所属的类型。
Java反射机制提供的功能包括:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。JAVA反射机制是在java代码运行状态中,对于任意一个类(类包括数据类,控制类等),都能够知道这个类的所有属性和方法,属性确定后,属性的类型也是唯一的。
Java代码的数据类的属性的类型包括简单类型,复杂类型,基本类型(本实施例未涉及),Java中的简单类型从概念上分为四种:实数、整数、字符、布尔值。但是有一点需要说明的是,Java里面只有八种原始类型,其列表如下:
实数:double、float
整数:byte、short、int、long
字符:char
布尔值:boolean。
复杂类型和基本类型的内存模型本质上是不一样的,简单数据类型的存储原理是这样的:所有的简单数据类型不存在“引用”的概念,简单数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面只有这八种数据类型是这种存储模型;而其他的只要是继承于Object类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。例如,Java中简单类型的int:int为整数类型,在存储的时候,用4个字节存储,范围为-2,147,483,648到2,147,483,647,在变量初始化的时候,int类型的默认值为0。
在本实施例中,根据所述类型将所述java代码的数据类生成avro的schema包括:
S11,判断所述数据类是否包括复杂类型的属性;
S12,在所述数据类包括复杂类型的属性时,将所述复杂类型的属性转换为简单类型的属性,使用简单类型的属性生成avro的schema;在所述数据类不包括复杂类型的属性时,使用简单类型的属性生成avro的schema。
在本实施例的一个示例中,将所述复杂类型的属性转换为简单类型的属性包括:拆分所述复杂类型的属性,得到所述复杂类型的属性所包含的多个子属性,其中,所述子属性的类型为简单类型。一个复杂类型的属性由多个简单类型的属性组成,通过对复杂类型的属性的拆分,可以实现复杂类型到简单类型的转换。
在此结合图3进行说明,图3是本发明实施例的生成schema的流程图,如图3所示,首先启动流程,对于java的数据模型(java代码),判断判断所述数据类是否包括复杂类型的属性,对于其中的简单类型(simple fields),直接生成avro的schema,对于复杂类型(complex fields),通过循环,将其转换为简单类型,再生成schema。
由于schema和java是不同格式的代码类型,包括其函数,组件,对象的表达方式,都有可能不同,因此在将java代码的数据类生成avro的schema时,需要将java代码的数据类映射成schema中的映射项(schema可以看成为一个映射表,用于映射key和value的对应关系),Avro定义了复杂数据类型schema和简单数据类型的schema,avro定义了简单数据类型和复杂数据类,简单数据类型有以下8种:类型、含义null、没有值boolean、布尔值int、32位有符合整数long、64位有符合整数float、单精度(32位)的IEEE、754浮点数double双精度(64位)的IEEE、754浮点数bytes、8位无符号字节序列string,字符串基本类型没有属性,基本类型的名字也就是类型的名字,比如:{“type”:“string”},复杂类型avro提供了6种复杂类型,分别是:Record,Enum,Array,Map,Union和Fi xed。根据所述类型将所述java代码的数据类生成avro的schema包括:
S21,将java代码的数据类映射为schema中的映射项;
在映射到复杂数据类型schema时,将java代码的数据类映射为schema中的映射项包括:
将所述java代码的数据类映射为schema中的record类型,将数组映射成array,将字典结果映射为map,其中,所述数据类包含所述数组和所述字典结果。
在简单类型的映射过程中,将java代码的数据类映射为schema中的映射项包括:
将java代码的null(no value)映射为schema中的空字符串;
将java代码的boolean值映射为schema中的bool和booleanint;
将java代码的32位有符号整数映射为schema中的intlong;
将java代码的64位有符号整数映射为schema中的longfloat;
将java代码的单精度IEEE 754浮点数映射为schema中的float double;
将java代码的双精度的IEEE 754浮点数映射为schema中的double bytes;
将java代码的8位无符号字节序列映射为schema中的byte string;
将java代码的字符串映射为schema中的string;
将java代码的枚举映射为schema中的enum。
S22,使用所述映射项拼装成avro的schema。在映射完成后,使用各个映射项拼装成avro的schema,可以进一步使用。
在本实施例中,在根据所述类型将所述java代码的数据类生成avro的schema之后,还包括:
S31,在第一设备上设置所述schema;
S32,接收第二设备发送的数据;第一设备与第二设备是相互通信的设备,可以是客户端/服务器模式,或者是客户端到客户端模型,或者其他任意可通信的两端,需要两端都设置schema配合使用,在设置了schema之后,第二设备在生成数据时,可以省去key,只将value转成二进制,在传输过程中省去key。
S33,使用所述schema还原所述数据的key。第一设备接收到value后,在本地使用schema还原key,从而实现了节约资源和开销的技术效果。
在本实施例中,在加载java代码的数据类之前,还包括:编辑所述java代码,或者,获取所述java代码。编辑所述java代码的场景中,即可以将用户现场编辑的java代码转换为schema,获取所述java代码的场景中,可以使用现有的java代码,将其转换为schema,非常方便实用。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种转换java代码的装置,该装置用于实现上述实施例及优选实施方式,包括终端、服务器等,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本发明实施例的转换java代码的终端的结构框图,如图4所示,该装置包括:
加载模块40,用于加载java代码的数据类;
处理模块42,用于查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
生成模块44,用于根据所述类型将所述java代码的数据类生成avro的schema。
在本实施例的一个可选实施方式中,所述处理模块包括:查看单元,用于在所述java代码的运行状态下,通过java的反射机制查看所述数据类的所有属性。
在本实施例的一个可选实施方式中,所述处理模块包括:获取单元,用于调用反射函数获取每个属性所属的类型。
在本实施例的一个可选实施方式中,所述生成模块包括:判断单元,用于判断所述数据类是否包括复杂类型的属性;第一生成单元,用于在所述数据类包括复杂类型的属性时,将所述复杂类型的属性转换为简单类型的属性,使用简单类型的属性生成avro的schema;第二生成单元,用于在所述数据类不包括复杂类型的属性时,使用简单类型的属性生成avro的schema。
在本实施例的一个可选实施方式中,所述第一生成单元还用于:拆分所述复杂类型的属性,得到所述复杂类型的属性所包含的多个子属性,其中,所述子属性的类型为简单类型。
在本实施例的一个可选实施方式中,所述生成模块包括:映射单元,用于将java代码的数据类映射为schema中的映射项;拼装单元,用于使用所述映射项拼装成avro的schema。
在本实施例的一个可选实施方式中,所述映射单元包括:映射子单元,用于将所述java代码的数据类映射为schema中的record类型,将数组映射成array,将字典结果映射为map,其中,所述数据类包含所述数组和所述字典结果。
可选的,所述映射单元还用于:
将java代码的null映射为schema中的空字符串;
将java代码的boolean值映射为schema中的bool和booleanint;
将java代码的32位有符号整数映射为schema中的intlong;
将java代码的64位有符号整数映射为schema中的longfloat;
将java代码的单精度IEEE 754浮点数映射为schema中的float double;
将java代码的双精度的IEEE 754浮点数映射为schema中的double bytes;
将java代码的8位无符号字节序列映射为schema中的byte string;
将java代码的字符串映射为schema中的string;
将java代码的枚举映射为schema中的enum。
在本实施例的一个可选实施方式中,所述终端还包括:设置模块,用于在所述生成模块根据所述类型将所述java代码的数据类生成avro的schema之后,在第一设备上设置所述schema;接收模块,用于接收第二设备发送的数据;还原模块,用于使用所述schema还原所述数据的key。
图5是根据本发明实施例的服务器的结构框图,如图5所示,该装置包括:
加载模块50,用于加载java代码的数据类;
处理模块52,用于查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
生成模块54,用于根据所述类型将所述java代码的数据类生成avro的schema。
在本实施例的一个可选实施方式中,所述处理模块包括:查看单元,用于在所述java代码的运行状态下,通过java的反射机制查看所述数据类的所有属性。
在本实施例的一个可选实施方式中,所述处理模块包括:获取单元,用于调用反射函数获取每个属性所属的类型。
在本实施例的一个可选实施方式中,所述生成模块包括:判断单元,用于判断所述数据类是否包括复杂类型的属性;第一生成单元,用于在所述数据类包括复杂类型的属性时,将所述复杂类型的属性转换为简单类型的属性,使用简单类型的属性生成avro的schema;第二生成单元,用于在所述数据类不包括复杂类型的属性时,使用简单类型的属性生成avro的schema。
在本实施例的一个可选实施方式中,所述第一生成单元还用于:拆分所述复杂类型的属性,得到所述复杂类型的属性所包含的多个子属性,其中,所述子属性的类型为简单类型。
在本实施例的一个可选实施方式中,所述生成模块包括:映射单元,用于将java代码的数据类映射为schema中的映射项;拼装单元,用于使用所述映射项拼装成avro的schema。
在本实施例的一个可选实施方式中,所述映射单元包括:映射子单元,用于将所述java代码的数据类映射为schema中的record类型,将数组映射成array,将字典结果映射为map,其中,所述数据类包含所述数组和所述字典结果。
可选的,所述映射单元还用于:
将java代码的null映射为schema中的空字符串;
将java代码的boolean值映射为schema中的bool和booleanint;
将java代码的32位有符号整数映射为schema中的intlong;
将java代码的64位有符号整数映射为schema中的longfloat;
将java代码的单精度IEEE 754浮点数映射为schema中的float double;
将java代码的双精度的IEEE 754浮点数映射为schema中的double bytes;
将java代码的8位无符号字节序列映射为schema中的byte string;
将java代码的字符串映射为schema中的string;
将java代码的枚举映射为schema中的enum。
在本实施例的一个可选实施方式中,所述服务器还包括:设置模块,用于在所述生成模块根据所述类型将所述java代码的数据类生成avro的schema之后,在第一设备上设置所述schema;接收模块,用于接收第二设备发送的数据;还原模块,用于使用所述schema还原所述数据的key。
需要说明的是,终端和服务器仅是方案在执行主体上的差异,上述识别终端中的各个示例和可选方案同样适应在服务器中,并产生相同的技术效果。
使用上述客户端或服务器,通过查看和获取java代码的数据类的每个属性所属的类型,把java数据类型的代码类直接转换成可供其他端使用的schema,同时可以直接帮助工程师跳过schema隐晦的编写,解决了相关技术中不能将java代码转换为schema的技术问题,实现了java对schema输出的补充,能改变java端一直被动等待其他端输出schema的局面,提高了程序员的代码编写效率。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,加载java代码的数据类;
S2,查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
S3,根据所述类型将所述java代码的数据类生成avro的schema。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,加载java代码的数据类;
S2,查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
S3,根据所述类型将所述java代码的数据类生成avro的schema。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种转换java代码的方法,其特征在于,包括:
加载java代码的数据类;
查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
根据所述类型将所述java代码的数据类生成avro的schema。
2.根据权利要求1所述的方法,其特征在于,根据所述类型将所述java代码的数据类生成avro的schema包括:
判断所述数据类是否包括复杂类型的属性;
在所述数据类包括复杂类型的属性时,将所述复杂类型的属性转换为简单类型的属性,使用简单类型的属性生成avro的schema;在所述数据类不包括复杂类型的属性时,使用简单类型的属性生成avro的schema。
3.根据权利要求2所述的方法,其特征在于,将所述复杂类型的属性转换为简单类型的属性包括:
拆分所述复杂类型的属性,得到所述复杂类型的属性所包含的多个子属性,其中,所述子属性的类型为简单类型。
4.根据权利要求1所述的方法,其特征在于,根据所述类型将所述java代码的数据类生成avro的schema包括:
将java代码的数据类映射为schema中的映射项;
使用所述映射项拼装成avro的schema。
5.根据权利要求4所述的方法,其特征在于,将java代码的数据类映射为schema中的映射项包括:
将所述java代码的数据类映射为schema中的record类型,将数组映射成array,将字典结果映射为map,其中,所述数据类包含所述数组和所述字典结果。
6.根据权利要求4所述的方法,其特征在于,将java代码的数据类映射为schema中的映射项包括:
将java代码的null映射为schema中的空字符串;
将java代码的boolean值映射为schema中的bool和booleanint;
将java代码的32位有符号整数映射为schema中的intlong;
将java代码的64位有符号整数映射为schema中的longfloat;
将java代码的单精度IEEE 754浮点数映射为schema中的float double;
将java代码的双精度的IEEE 754浮点数映射为schema中的double bytes;
将java代码的8位无符号字节序列映射为schema中的byte string;
将java代码的字符串映射为schema中的string;
将java代码的枚举映射为schema中的enum。
7.根据权利要求1所述的方法,其特征在于,在根据所述类型将所述java代码的数据类生成avro的schema之后,所述方法还包括:
在第一设备上设置所述schema;
接收第二设备发送的数据;
使用所述schema还原所述数据的key。
8.一种转换java代码的装置,其特征在于,包括:
加载模块,用于加载java代码的数据类;
处理模块,用于查看所述数据类的所有属性,并获取每个属性所属的类型,其中,所述类型包括:简单类型,复杂类型;
生成模块,用于根据所述类型将所述java代码的数据类生成avro的schema。
9.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7任一项中所述的方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至7任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811075421.5A CN109388406A (zh) | 2018-09-14 | 2018-09-14 | 转换java代码的方法及装置、存储介质、电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811075421.5A CN109388406A (zh) | 2018-09-14 | 2018-09-14 | 转换java代码的方法及装置、存储介质、电子装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109388406A true CN109388406A (zh) | 2019-02-26 |
Family
ID=65417629
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811075421.5A Pending CN109388406A (zh) | 2018-09-14 | 2018-09-14 | 转换java代码的方法及装置、存储介质、电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109388406A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416365A (zh) * | 2020-11-18 | 2021-02-26 | 中信银行股份有限公司 | 文件转换方法、装置及存储介质 |
CN112764763A (zh) * | 2020-12-31 | 2021-05-07 | 亿企赢网络科技有限公司 | 一种代码转换方法、***、设备及计算机可读存储介质 |
CN113468202A (zh) * | 2021-06-30 | 2021-10-01 | 深圳软牛科技有限公司 | 内存数据的筛选方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150154011A1 (en) * | 2013-11-29 | 2015-06-04 | Huawei Technologies Co., Ltd. | Transplantation Method and Source-to-Source Compiler |
-
2018
- 2018-09-14 CN CN201811075421.5A patent/CN109388406A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150154011A1 (en) * | 2013-11-29 | 2015-06-04 | Huawei Technologies Co., Ltd. | Transplantation Method and Source-to-Source Compiler |
Non-Patent Citations (2)
Title |
---|
COWTOWNCODER: "《jackson-dataformats-binary/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/AvroSchemaHelper.java》", 《WWW.GITHUB.COM》 * |
FGE: "《json-schema-avro/src/main/java/com/github/fge/avro/translators/》", 《WWW.GITHUB.COM》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416365A (zh) * | 2020-11-18 | 2021-02-26 | 中信银行股份有限公司 | 文件转换方法、装置及存储介质 |
CN112416365B (zh) * | 2020-11-18 | 2024-05-24 | 中信银行股份有限公司 | 文件转换方法、装置及存储介质 |
CN112764763A (zh) * | 2020-12-31 | 2021-05-07 | 亿企赢网络科技有限公司 | 一种代码转换方法、***、设备及计算机可读存储介质 |
CN112764763B (zh) * | 2020-12-31 | 2024-01-26 | 亿企赢网络科技有限公司 | 一种代码转换方法、***、设备及计算机可读存储介质 |
CN113468202A (zh) * | 2021-06-30 | 2021-10-01 | 深圳软牛科技有限公司 | 内存数据的筛选方法、装置、设备及存储介质 |
CN113468202B (zh) * | 2021-06-30 | 2024-05-17 | 深圳软牛科技有限公司 | 内存数据的筛选方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10678522B1 (en) | Compiler and method for compiling business rules for a serverless runtime environment | |
CN111209005B (zh) | 程序文件的编译方法、装置和计算机可读存储介质 | |
CN109308224B (zh) | 跨平台数据通信、跨平台数据处理的方法、装置及*** | |
CN109976761A (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
CN110502212B (zh) | 一种面向多语言的高并发在线开发支撑方法 | |
US20140157243A1 (en) | System for Translating Diverse Programming Languages | |
US20150242194A1 (en) | System for Translating Diverse Programming Languages | |
CN111399840B (zh) | 一种模块开发方法及装置 | |
CN102508669A (zh) | 一种程序代码自动生成方法 | |
CN104683386A (zh) | 可定制响应的桩服务实现方法及装置 | |
CN102566984B (zh) | 一种配置参数的方法及装置 | |
CN109388406A (zh) | 转换java代码的方法及装置、存储介质、电子装置 | |
CN112035090B (zh) | 基于容器化技术实现智能合约智慧化管理***及方法 | |
CN111399828B (zh) | 一种基于模型驱动的逻辑设备建模方法及终端 | |
CN110673856A (zh) | 一种数据处理方法、装置及机器可读存储介质 | |
CN111611441B (zh) | 异构数据的处理方法、装置以及计算机设备 | |
CN115016784B (zh) | 低代码应用复用方法、应用解析***、设备及存储介质 | |
CN112615759A (zh) | 全链路压测组件、全链路压测方法及装置 | |
CN114510452A (zh) | 片上***soc集成方法、装置及电子设备 | |
CN110717268B (zh) | 一种基于face架构的可移植组件单元封装方法 | |
CN104063231A (zh) | 一种基于hit-tena的试验资源快速接入方法 | |
CN111367894B (zh) | 基于数据库迁移的数据对比方法及装置 | |
CN112328241B (zh) | 一种应用程序开发中创建Android库模块依赖关系的方法及装置 | |
CN115328679A (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: 20190226 |
|
RJ01 | Rejection of invention patent application after publication |