Java protobuf框架使用嚮導

高效的、可擴展的對結構化數據進行編碼的格式規範 html


下面介紹的是使用Java ProtoBuf的基本步驟: java

1.http://code.google.com/p/protobuf/downloads/list ,選擇其中的win版本下載 eclipse

2.下載一個protobuf-java-2.4.1.jar文件(注意,要與你剛纔下的proto.exe版本相同,不然可能出現編譯通不過現象) maven

http://grepcode.com/snapshot/repo1.maven.org/maven2/com.google.protobuf/protobuf-java/2.4.1 ui

3.在proto.exe同級目錄,編寫一個msg.proto文件: google

package tutorial;   
option java_package = "com.protobuftest.protobuf";   
option java_outer_classname = "PersonProbuf";   
message Person {   
  required string name = 1;   
  required int32 id = 2;   
  optional string email = 3;   
  enum PhoneType {   
    MOBILE = 0;   
    HOME = 1;   
    WORK = 2;   
  }   
  message PhoneNumber {   
    required string number = 1;   
    optional PhoneType type = 2 [default = HOME];   
  }   
  repeated PhoneNumber phone = 4;   
  message CountryInfo {  
          required string name = 1;  
          required string code = 2;  
          optional int32 number = 3;  
  }  
}   
message AddressBook {   
  repeated Person person = 1;   
}


4.使用以下命令編譯這個文件: 編碼

5.將生成的ProtoBufferPractice.java文件引入eclipse spa

6.把下載的protobuf-java-2.4.1.jar也引入工程 .net

7.使用方法: code


import java.util.List;
import com.google.protobuf.InvalidProtocolBufferException;
import com.protobuftest.protobuf.PersonProbuf;
import com.protobuftest.protobuf.PersonProbuf.Person;
import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber;
import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumberOrBuilder;
import com.protobuftest.protobuf.PersonProbuf.Person.PhoneType;

public class ProtoBufTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
		builder.setEmail("kkk@email.com");
		builder.setId(1);
		builder.setName("TestName");
		builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder()
				.setNumber("131111111")
				.setType(PersonProbuf.Person.PhoneType.MOBILE));
		builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder()
				.setNumber("011111")
				.setType(PersonProbuf.Person.PhoneType.HOME));
		Person person = builder.build();
		byte[] buf = person.toByteArray();
		try {
			Person person2 = PersonProbuf.Person.parseFrom(buf);
			System.out.println(person2.getName() + ", " + person2.getEmail());
			List<PhoneNumber> lstPhones = person2.getPhoneList();
			for (PhoneNumber phoneNumber : lstPhones) {
				System.out.println(phoneNumber.getNumber());
			}
		} catch (InvalidProtocolBufferException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(buf);
	}
}



源文檔 <http://blog.csdn.net/csharp25/article/details/6632127

原文連接:http://www.cnblogs.com/brainy/archive/2012/05/11/2496581.html

相關文章
相關標籤/搜索