測試環境:Ubuntu 16.04 LTShtml
安裝編譯依賴java
sudo apt-get install autoconf automake libtool curl make g++ unzip
解壓、編譯、安裝(測試時是非root賬號,因此install時須要sudo)linux
tar -xvf protobuf-all-3.6.1.tar.gz cd protobuf-3.6.1 ./configure --prefix=/usr/local/protobuf make make check sudo make install
配置1:環境變量(參考連接)git
vim /etc/profile 添加兩行: export PATH=$PATH:/usr/local/protobuf/bin/ export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/ source /etc/profile ~/.profile中也添加上面兩行
配置2:動態連接庫github
cd /etc/ld.so.conf.d/ sudo vi protobuf.conf 添加一行: /usr/local/protobuf/lib ldconfig
確認版本vim
$ protoc --version libprotoc 3.6.1
驗證(轉自)
vi message.protocurl
syntax = "proto3"; message Person { int32 id = 1; string name = 2; repeated Phone phone = 4; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message Phone { string number = 1; PhoneType type = 2; } }
protoc --java_out=./java ./proto/message.protojvm
java代碼驗證
maven引入:maven
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.6.1</version> </dependency>
gradle引入:性能
compile 'com.google.protobuf:protobuf-java:3.6.1'
java代碼
import com.google.protobuf.InvalidProtocolBufferException; import java.util.Arrays; import java.util.List; public class App { public static void main(String[] args) { Message.Person.Builder personBuilder = Message.Person.newBuilder(); personBuilder.setId(12345678); personBuilder.setName("Admin"); personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10010").setType(Message.Person.PhoneType.MOBILE)); personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10086").setType(Message.Person.PhoneType.HOME)); personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10000").setType(Message.Person.PhoneType.WORK)); Message.Person person = personBuilder.build(); byte[] buff = person.toByteArray(); try { Message.Person personOut = Message.Person.parseFrom(buff); System.out.printf("Id:%d, Name:%s\n", personOut.getId(), personOut.getName()); List<Message.Person.Phone> phoneList = personOut.getPhoneList(); for (Message.Person.Phone phone : phoneList) { System.out.printf("PhoneNumber:%s (%s)\n", phone.getNumber(), phone.getType()); } } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } System.out.println(Arrays.toString(buff)); } }
其餘