предисловие
Protocol Buffers
, представляет собой язык описания данных, разработанный Google, аналогичный XML, который может сериализовать структурированные данные и может использоваться для хранения данных, протоколов связи и т. д.
Он не зависит от языка и платформы и чрезвычайно расширяем. Официальная поддержка на данном этапеC++
,JAVA
,Python
Три языка программирования, но вы можете найти большое количество сторонних пакетов расширения, охватывающих практически все языки.
Google объявил об этом как о проекте с открытым исходным кодом 7 июля 2008 г.
Несмотря на то чтоProtocol Buffers
Он был открыт с открытым исходным кодом очень рано, и частота использования неJson
иXML
Многие, большинство из них используются в протоколах разработки игр,RPC
обмен мгновенными сообщениями, однако такой инструмент обмена данными болееJson
иXML
Преимуществ много, номеньше,Быстрее,проще
Эта статья следуетВремя узнать о волне протокольных буферов [Android]После фона Java SpringBoot быстро интегрирует протокольные буферы.
Быстрое использование протокольных буферов в SpringBoot
(1) Maven настраивает среду компиляции Protocol Buffers в среде SpringBoot.
-
setup 1
настроить
protobuf
,protobuf-java-util
,protobuf-java-format
полагаться<dependencies> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.googlecode.protobuf-java-format</groupId> <artifactId>protobuf-java-format</artifactId> <version>1.4</version> </dependency> </dependencies>
Уведомление:
-
protobuf-java-util
даprotobuf
связанные инструменты -
protobuf-java-format
это возможноprotobuf
преобразовать вJson
конвертер форматов -
setup 2
Настройте компилятор, скомпилируйте плагин MAven, среду вывода файла
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.5.0</version> <extensions>true</extensions> <configuration> <!--默认值--> <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot> <!--默认值--> <!--<outputDirectory>${project.build.directory}/generated-sources/protobuf/java</outputDirectory>--> <!--<outputDirectory>${project.build.sourceDirectory}</outputDirectory>--> <!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true,设置为false时也会覆盖同名文件--> <clearOutputDirectory>false</clearOutputDirectory> <!--默认值--> <temporaryProtoFileDirectory>${project.build.directory}/protoc-dependencies </temporaryProtoFileDirectory> <!--更多配置信息可以查看https://www.xolstice.org/protobuf-maven-plugin/compile-mojo.html--> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> <!--也可以设置成局部变量,执行compile或test-compile时才执行--> <!--<configuration>--> <!--<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>--> <!--<outputDirectory>${project.build.directory}/generated-sources/protobuf/java</outputDirectory>--> <!--<temporaryProtoFileDirectory>${project.build.directory}/protoc-dependencies</temporaryProtoFileDirectory>--> <!--</configuration>--> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-protobuf-generate-sources</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>target/generated-sources/protobuf/java</source> </sources> </configuration> </execution> <execution> <id>add-protobuf-generate-test-sources</id> <phase>generate-sources</phase> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>target/generated-test-sources/protobuf/java</source> </sources> </configuration> </execution> </executions> </plugin>
-
Уведомление:
- Указанный выходной путь здесь
arget/generated-sources/protobuf/java
, java-файлы по этому пути используются напрямую и вводятся в пакеты jar и war-пакеты.
(2) Напишите файл .proto в проекте Java и создайте файл Java.
-
setup 1
Файл .proto записывается в java-проекте, например: New Result.proto
package com.hk.protocolbuffer; // 关注1:包名 option java_package = "com.hk.protocolbuffer"; option java_outer_classname = "Result"; // 关注2:option选项 // 关注3:消息模型 message AppResult { optional string message = 1; required string data = 2; optional string version = 3; optional string mobile = 5; optional int32 code= 6[default = 500]; optional string email = 7; }
Файл .proto записывается в java-проекте, например: Создайте новый Demo.proto
package protocobuff_Demo; // 关注1:包名 option java_package = "com.hk.protocolbuffer"; option java_outer_classname = "Demo"; // 关注2:option选项 // 关注3:消息模型 // 下面详细说明 // 生成 Person 消息对象(包含多个字段,下面详细说明) 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 AddressBook { repeated Person person = 1; }
-
setup 2
Используйте команду mvn clean install для сборки в папке проекта
arget/generated-sources/protobuf/java
Сгенерированные файлы можно найти в разделе, а результаты можно получить
Уведомление:
- Если файл не распознается по идее, пожалуйста, установите
Protobuf Support
плагин -
com\hk\protocolbuffer
каталогoption java_package
указанное имя пакета - Справочник по синтаксису .proto:Developers.Google.com/protocol - нет...
- Если файл не распознается по идее, пожалуйста, установите
(3) Использование SpringBoot с Protobuf в проектах Java
-
setup 1
настроить
ProtobufHttpMessageConverter
, другая базовая конфигурация SpringBoot настраивается автоматически, вы можете использовать ее напрямую/** * This example demonstrates serving up REST payloads encoded using Google Protocol Buffers. */ @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Bean ProtobufHttpMessageConverter protobufHttpMessageConverter() { return new ProtobufHttpMessageConverter(); } }
-
setup 2
Пример использования
@RestController @RequestMapping("/app") public class ApiRegisterController { @Resource(name = "appUserService") private AppUserService appUserService; @PostMapping("register2") public Demo.Person register2(@RequestBody Result.AppResult appBaseResult) throws Exception { return Demo.Person.newBuilder().addPhone(Demo.Person.PhoneNumber.newBuilder().setNumber(appBaseResult.getData()).build()).setId(1).setName("张三").build(); } }
так какprotobuf
Отладка - головная боль, я нашел несколько инструментов отладки в Интернете (добро пожаловать, чтобы добавить):
- инструмент:GitHub.com/Чжан Цзиньдун…
- Baidu с открытым исходным кодомGitHub.com/J hunters/Клавиатура…
Заканчивать
Статьи по Теме
Статья 1 - Сетевые статьи:
Часть 2. Анализ модифицированного исходного кода
Часть 3. Компонентизация Android и быстрая реализация MVP
Часть 3. Время узнать о волне протокольных буферов [Android]
Часть 3. Время узнать о волне протокольных буферов [Java]
обновление....
О личности
Github:github.com/chengzichen
CSDN : blog.CSDN.net/Оранжевый Чен…
личный блог:chengzichen.github.io/