scala中使用protobuf
2016-05-31 20:11
756 查看
最近一个项目中,需要在spark中解析protobuf编码过的数据。
针对这个问题,我首先试了一下在scala中解析protobuf编码后数据的功能,下面记录了详细过程
1.书写proto文件
![](https://img-blog.csdn.net/20160531200340559?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.编译proto文件,获取java类文件
![](https://img-blog.csdn.net/20160531201530329?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.把刚刚得到java类文件拷贝maven工程目录下,注意目录结果和package一致
4.修改maven配置文件,加入对protobuf的依赖
![](https://img-blog.csdn.net/20160531200705732?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5.编写读写protobuf的scala代码
针对这个问题,我首先试了一下在scala中解析protobuf编码后数据的功能,下面记录了详细过程
1.书写proto文件
2.编译proto文件,获取java类文件
3.把刚刚得到java类文件拷贝maven工程目录下,注意目录结果和package一致
4.修改maven配置文件,加入对protobuf的依赖
5.编写读写protobuf的scala代码
package hello import scala.collection.JavaConversions._ import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import myproto._ object helloword { def main(args: Array[String]) { println("start .......") ////1.构建对象 val personBuilder = PersonMsg.Person.newBuilder() personBuilder.setId(1) personBuilder.setName("老王") personBuilder.setEmail("laowang@163.com") personBuilder.addFriends("zhangsan") personBuilder.addFriends("lisi") val person1 = personBuilder.build() ////2.序列化 val output = new ByteArrayOutputStream() person1.writeTo(output) val byteArray = output.toByteArray ////反序列化 val input = new ByteArrayInputStream(byteArray) val person2 = PersonMsg.Person.parseFrom(input) ////打印对象 println("ID:" + person2.getId) println("name:" + person2.getName) println("email:" + person2.getEmail) person2.getFriendsList.toList.toArray.map(item=>println("-----",item,"-------")) } }6.运行测试
相关文章推荐
- Tcp/Ip通信协议
- SVM入门(五)线性分类器的求解——问题的描述Part2
- Middle-题目121:15. 3Sum
- CSS基础知识-四(边框样式、caption、表格居中、边框宽度和高度、id和class的区别、Div+CSS布局)
- Java多线程之线程创建和启动
- socket编程—select方法使用
- JAVA权重抽取
- 接口设计小结
- Middle-题目120:179. Largest Number
- MyEclipse快捷键
- 进程描述符task_struct
- ASP.NET MVC Model验证总结【转】
- 站立会议03(第二期)
- VMware 使用 NAT 模式联网问题
- Apache - AH00341
- Apache - AH00341
- 变量应用
- Middle-题目119:127. Word Ladder
- xshell项目服务器命令
- 免安装Tomcat服务的安装