天天看點

java&Protocol Buffers

ps: Protocol Buffers簡稱PB

安裝 PB:

解壓:<code>tar zxvf protobuf-2.5.0.tar.gz</code>,使用 <code>cd</code> 指令進入 <code>protobuf-2.5.0</code> 目錄。

./configure,通常建議加上 <code>--prefix</code> 參數來指定目錄,例如:

<code>./configure --prefix=/usr/local/Cellar/protobuf/2.5.0</code>

make,如出現 <code>make: Nothing to be done for all</code> 錯誤提示,表示 PB 已經被編譯好了,如需重新編譯,可以先用 <code>make clean</code> 指令删除已經編譯好的檔案。

make check

make install

設定環境變量: 編輯 <code>/etc/profile</code>,在檔案末尾加入:

至此,PB已經成功安裝完畢,可以使用 <code>protoc --version</code> 指令來驗證是否安裝成功,如果出現如下結果,則表示 PB 已經安裝成功并且生效。

通常我們在編寫好 PB 檔案之後,需要使用 <code>protoc</code> 來将 PB 檔案編譯成對應的代碼,在指令行裡面我們可以使用如下指令來生成對應的 Java 檔案:

在 IDE 中編寫 PB 檔案之後,可以在指定 package 下一鍵生成對應的 Java 檔案,友善對 Java 檔案的管理。

安裝 PB 插件。進入 IDEA 設定中心,打開 <code>Plugins</code>,點選 <code>Browse repositories</code>,搜尋 <code>protocol buffer</code>安裝插件,如下圖所示。安裝好 PB 插件之後,需要重新開機 IDEA。

java&amp;Protocol Buffers

配置路徑。PB 插件安裝完畢之後,需要為插件配置 PB 的編譯路徑,也就是在上一步中我們安裝的 <code>protoc</code>。

java&amp;Protocol Buffers

至此,IDEA PB 插件安裝完成,下面介紹如何在項目中使用 PB 插件來快速生成 Java 檔案。

建立 Maven 項目,配置 PB 生成 Java 檔案的目錄:進入 <code>Project Settings</code>,填寫 <code>Output source directory</code>,這裡的目錄就是項目的 <code>Java source</code> 目錄。

java&amp;Protocol Buffers

根據 PB 描述檔案,生成 Java 檔案。在 PB 檔案中右鍵,從菜單中選擇 <code>Compile ‘person.proto’</code>,就能生成對應的 Java 檔案。

加入 Maven 依賴。在 pom.xml 檔案中加入如下依賴:

        PersonModel.Person.Builder personBuilder = PersonModel.Person.newBuilder();  

        personBuilder.setId(1);  

        personBuilder.setName("***");  

        personBuilder.setEmail("[email protected]");  

        PersonModel.Person person1 = personBuilder.build();  

   // 将資料寫到輸出流,如網絡輸出流,這裡就用ByteArrayOutputStream來代替  

        ByteArrayOutputStream output = new ByteArrayOutputStream();  

   person1 .writeTo(output);  

   byte[] byteArray = output.toByteArray();  

  // 接收到流并讀取,如網絡輸入流,這裡用ByteArrayInputStream來代替  

      ByteArrayInputStream input = new ByteArrayInputStream(byteArray);  

      PersonModel.Person person2= PersonModel.Person.parseFrom(input);  

      System.out.println("ID:" + person2.getId());  

      System.out.println("name:" + person2.getName());  

      System.out.println("email:" + person2.getEmail());