java protobuf 例子_java使用protobuf例子
Protobuf版本:2.5.0
最近研究Hadoop時(shí),發(fā)現(xiàn)Hadoop的RPC使用到了Protobuf這個(gè)東西,于是就了解了這個(gè) Protobuf
Protobuf是google的一種數(shù)據(jù)交互格式(類似于xml,json),它獨(dú)立于語言和平臺(tái)。
但是可憐的google已被墻了,我們只能從github那邊下載
由于Hadoop用的是2.5版本,所有我這里也同樣下載了2.5的版本。
有2個(gè)文件protobuf-2.5.0.tar.gz ,protoc-2.5.0-win32.zip(window使用,linux可不下載)
下載protoc主要是需要使用到protoc生成java文件,如果是linux可參照protobuf-2.5.0.tar.gz包里面的readme
編譯
下載完成后我們要先編寫proto文件,使用生成java代碼,以下為一個(gè)User類的proto的文件
User.proto
syntax = "proto2";
option java_package = "com.bossky.protobuf";
option java_outer_classname = "UserProto";
message User
{
optional string username = 1;
optional string password = 2;
required int64 createTime = 3;
required int32 age = 4;
}
syntax指定了protobuf協(xié)議的版本,默認(rèn)是v2版本
java_package指定了生成類的包名
java_outer_classname指定了生成類的類名
message指定了消息對象的類名
{}里面為屬性 ?x=1 指定了屬性的序號(hào)
然后使用
protoc ?--java_out=./ ./User.proto
java_out 指定了java文件輸出的路徑 ?, ./User.proto指定了proto的路徑
這樣我們就生成了一個(gè)UserProto類,使用這個(gè)類就可以輕松的用protobuf傳輸數(shù)據(jù)了
以下為使用例子
package com.bossky.protobufdemo;
import com.bossky.protobuf.UserProto;
import com.google.protobuf.InvalidProtocolBufferException;
/**
* Hello world!
*
*/
public class ProtobufApp {
public static void main(String[] args) {
// 通過建造者創(chuàng)建
UserProto.User.Builder builder = UserProto.User.newBuilder();
builder.setCreateTime(System.currentTimeMillis());
builder.setUsername("Test");
builder.setPassword("pass123");
builder.setAge(24);
UserProto.User user = builder.build();// 創(chuàng)建
System.out.println(
user.getCreateTime() + "," + user.getUsername() + "," + user.getPassword() + "," + user.getAge());
byte[] bs = user.toByteArray();
try {
UserProto.User other = UserProto.User.parseFrom(bs);// 從字節(jié)數(shù)組中讀取回
System.out.println(other.getCreateTime() + "," + other.getUsername() + "," + other.getPassword() + ","
+ other.getAge());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
總結(jié)
以上是生活随笔為你收集整理的java protobuf 例子_java使用protobuf例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取消java相关网络协议_java相关网
- 下一篇: easy admin java_GitH