一种基于jersey框架的数据传输方法与流程

文档序号:27379910发布日期:2021-11-15 19:37阅读:148来源:国知局
一种基于jersey框架的数据传输方法与流程

1.本发明涉及数据传输技术领域,具体提供一种基于jersey框架的数据传输方法。


背景技术:

2.rest中最重要的概念是资源(resources),使用全球id(通常使用uri)标识。客户端应用程序使用http方法(get/post/put/delete)操作资源或资源集。restful web服务是使用http和rest原理实现的web服务。通常,restful web服务应该定义以下方面:(1)web服务的基/根uri,比如http://host/<appcontext>/resources;(2)支持mime类型的响应数据,包括json/xml/atom等等;(3)服务支持的操作集合(例如post、get、put或delete)。
3.jax

rs是将在javaee6引起的一种新技术。jax

rs即java api for restful web services,是一个java编程语言的应用程序接口,支持按照表述性状态转移(rest)架构风格创建web服务。jax

rs使用了java se5引入的java标注来简化web服务的客户端和服务端的开发和部署。
4.jersey是jax

rs的参考实现,它包含三个主要部分:(1)核心服务器(core server):通过提供jsr 311中标准化的注释和api标准化,可以用直观的方式开发restful web服务;(2)核心客户端(core client):jersey客户端api与rest服务轻松通信;(3)集成(integration):jersey还提供可以轻松集成spring、guice、apache abdera的库。jersey传输方式包括:基本类型、文件类型、inputstream类型、reader类型、xml类型、json类型等。
5.avro是hadoop中的一个子项目,也是apache中一个独立的项目,avro是一个基于二进制数据传输高性能的中间件。在hadoop的其他项目中例如hbase(ref)和hive(ref)的客户端与服务端的数据传输也采用了这个工具。avro是一个数据序列化的系统。avro可以将数据结构或对象转化成便于存储或传输的格式。avro设计之初就用来支持数据密集型应用,适合于远程或本地大规模数据的存储和交换。
6.传统的byte[]数组传递,可以通过java原生的序列化操作生成byte,但是效率低下,有待进一步改进。


技术实现要素:

[0007]
本发明的技术任务是针对上述存在的问题,提供一种传输效率高效,方便操作以及方便开发的基于jersey框架的数据传输方法。
[0008]
为实现上述目的,本发明提供了如下技术方案:
[0009]
一种基于jersey框架的数据传输方法,所述数据传输方法利用apache avro的二进制编码机制,实现数据的高效的序列化,将数据转为byte[]数组,从而在jersey框架中实现客户端与服务端之间的高效传输;具体包括以下步骤:
[0010]
s1:定义avro中的schema;
[0011]
s2:编译schema,直接输入命令:mvn clean install,maven插件自动生成类文件;
[0012]
s3:序列化类的对象,将类的实例进行序列化操作,生成byte[]数组;
[0013]
s4:jersey客户端向服务端传递byte[]数组,实现高效传输;
[0014]
s5:jersey服务端接收客户端传输的数据,并且进行反序列化。
[0015]
步骤s2中生成类文件:mvn clean install,可用生成类的实例,例如如下,
[0016]
user user1=new user();
[0017]
user1.setname("alyssa");
[0018]
user1.setfavoritenumber(256);
[0019]
user user2=new user("ben",7,"red");
[0020]
user user3=user.newbuilder()
[0021]
.setname("charlie")
[0022]
.setfavoritecolor("blue")
[0023]
.setfavoritenumber(null)
[0024]
.build();
[0025]
步骤s3中,生成byte[]数组,如下所示(data为生成的对象):
[0026]
specificdatumwriter<object>writer=new
[0027]
specificdatumwriter<>(schema);
[0028]
bytearrayoutputstream output=new bytearrayoutputstream();
[0029]
encoder encoder=encoderfactory.get().binaryencoder(output,null);
[0030]
writer.write(data,encoder);
[0031]
encoder.flush();
[0032]
byte[]databyte=output.tobytearray();
[0033]
步骤s4如下:
[0034][0035]
步骤s5如下:
[0036][0037]
作为优选,步骤s1中,使用json为avro定义schema。
[0038]
作为优选,所述schema由基本类型和复杂类型组成。
[0039]
基本类型包括null,boolean,int,long,float,double,bytes和string,复杂类型包括record,enum,array,map,union和fixed。
[0040]
例如,以下定义一个user的schema,在main目录下创建一个avro目录,然后在avro目录下新建文件user.avsc:
[0041][0042][0043]
作为优选,所述步骤s2中,使用avro插件,直接输入命令。
[0044]
与现有技术相比,本发明的基于jersey框架的数据传输方法具有以下突出的有益效果:
[0045]
(一)传统的byte[]数组传输,可以通过java原生的序列化操作生成byte,但是效率低下,通过本发明所述的avro序列化生成的byte[]数组效率高效;
[0046]
(二)通过avro类插件生成配置好的类文件,方便操作,jersey结合avro的这种优
点,方便进行开发,具有良好的推广应用价值。
具体实施方式
[0047]
下面将结合实施例,对本发明的基于jersey框架的数据传输方法作进一步详细说明。
[0048]
实施例
[0049]
本发明的基于jersey框架的数据传输方法,利用apache avro的二进制编码机制,实现数据的高效的序列化,将数据转为byte[]数组,从而在jersey框架中实现客户端与服务端之间的高效传输。
[0050]
该基于jersey框架的数据传输方法具体包括以下步骤:
[0051]
s1:定义avro中的schema。
[0052]
使用json为avro定义schema,schema由基本类型和复杂类型组成,基本类型包括null,boolean,int,long,float,double,bytes和string,复杂类型包括record,enum,array,map,union和fixed。
[0053]
以下定义一个user的schema,在main目录下创建一个avro目录,然后在avro目录下新建文件user.avsc:
[0054][0055][0056]
s2:编译schema,直接输入命令:mvn clean install,maven插件自动生成类文件:mvn clean install。
[0057]
使用avro插件,直接输入命令:mvn clean install,maven插件自动生成类文件:mvn clean install。
[0058]
s3:序列化类的对象,将类的实例进行序列化操作,生成byte[]数组。
[0059]
生成byte[]数组,如下所示(data为生成的对象):
[0060]
specificdatumwriter<object>writer=new
[0061]
specificdatumwriter<>(schema);
[0062]
bytearrayoutputstream output=new bytearrayoutputstream();
[0063]
encoder encoder=encoderfactory.get().binaryencoder(output,null);
[0064]
writer.write(data,encoder);
[0065]
encoder.flush();
[0066]
byte[]databyte=output.tobytearray();
[0067]
s4:jersey客户端向服务端传递byte[]数组,实现高效传输。
[0068]
webtarget target=client.target(suburl);
[0069]
response=target.request()
[0070]
.buildpost(entity.entity(databyte,
[0071]
mediatype.application_octet_stream))
[0072]
.invoke()。
[0073]
s5:jersey服务端接收客户端传输的数据,并且进行反序列化
[0074][0075][0076]
以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1