httpclient +protobuf 实现数据传输_httpclient 调用 protocol buffer协议接口(1)

12 篇文章 0 订阅
12 篇文章 0 订阅

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[html] 
view plain
 copy

  1. tar -zxf  protobuf-2.5.0.tar.gz

1.3 进入软件目录

[html] 
view plain
 copy

  1. cd protobuf-2.5.0

1.4 设置编译目录

[html] 
view plain
 copy

  1. ./configure --prefix=/User/jack/software/tools/protobuf
  2. /User/jack/software/tools/protobuf  为自己设定的编译安装目录

1.5 安装

[html] 
view plain
 copy

  1. make
  2. make install

1.6 
配置环境变量

[html] 
view plain
 copy

  1. sudo vi .bash_profile
  2. export PROTOBUF=/Users/jack/software/tools/protobuf
  3. export PATH= P R O T O B U F / b i n : PROTOBUF/bin: PROTOBUF/bin:PATH

1.7 验证

[html] 
view plain
 copy

  1. jack-3:bin jack$ protoc --version
  2. libprotoc 2.5.0

二、代码编写

2.1 查看.proto文件,只贴出了部分文件内容

[html] 
view plain
 copy

  1. package mobads.apiv5;
  2. // 本文件描述API接口版本:5.0.0
  3. // 版本号信息
  4. message Version {
  5. optional uint32 major = 1[default = 0]; // 必填!
  6. optional uint32 minor = 2[default = 0]; // 选填!
  7. optional uint32 micro = 3[default = 0]; // 选填!
  8. };

2.2 下载 protobuf-java-2.5.0.jar

[html] 
view plain
 copy

  1. http://download.csdn.net/download/zinc2008/8128155

2.3 生成.java文件

[html] 
view plain
 copy

  1. protoc --java_out=./ baidu_mobads_api_5.0.proto

同样只贴出部分java源文件 ( 注意java文件不要修改哦)

[html] 
view plain
 copy

  1. // Generated by the protocol buffer compiler.  DO NOT EDIT!
  2. // source: baidu_mobads_api_5.0.proto
  3. package mobads.apiv5;
  4. public final class BaiduMobadsApi50 {
  5. private BaiduMobadsApi50() {}
  6. }

2.4 代码编写,只贴出关键部分

[html] 
view plain
 copy

  1. MobadsRequest adrequest = MobadsRequest.newBuilder().setRequestId(requestId).setAdslot(adslot).build();
  2. byte[] content = adrequest.toByteArray();
  3. HttpClient client = new HttpClient();
  4. PostMethod postMethod = new PostMethod(URL);
  5. postMethod.addRequestHeader(“Content-Type”, “application/octet-stream;charset=utf-8”);
  6. postMethod.setRequestEntity(new ByteArrayRequestEntity(content ));
  7. client.executeMethod(postMethod);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意content-type 设置为
application/octet-stream。

到此,就完成了通过httpclient的post请求传输protobuf二进制流。
使用protobuf,所有的参数和返回都是对象的形式,这点还是用着比较爽的。

String byte 切换方法

服务端返回字符串

方式一:

[java] 
view plain
 copy

  1. Arrays.toString(personInfo.toByteArray())

方式二:

[java] 
view plain
 copy

  1. toByteString().toStringUtf8()

客户端解析字符串

方式一:

[java] 
view plain
 copy

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. private static byte[] fromString(String string) {
  2. String[] strings = string.replace(“[”, “”).replace(“]”, “”).split(", ");
  3. byte[] result = new byte[strings.length];
  4. for (int i = 0; i < result.length; i++) {
  5. result[i] = Byte.parseByte(strings[i]);
  6. }
  7. return result;
  8. }
  9. XXX.parseFrom(fromString(byteString))

方式二:

[java]

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

. XXX.parseFrom(fromString(byteString))

方式二:

[java]

[外链图片转存中…(img-Ebu6y09i-1715903288228)]
[外链图片转存中…(img-58piXANR-1715903288228)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值