Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Protocol Buffers

From Wikipedia, the free encyclopedia
Data serialization format
Protocol Buffers
DeveloperGoogle
Initial releaseEarly 2001 (internal)[1]
July 7, 2008 (2008-07-07) (public)
Stable release
33.1 Edit this on Wikidata / 12 November 2025; 10 days ago (12 November 2025)[2]
Repository
Written inC++, C#, Java, Python, JavaScript, Ruby, Go, PHP, Dart
Operating systemAny
PlatformCross-platform
Typeserialization format and library,IDL compiler
LicenseBSD
Websiteprotobuf.devEdit this at Wikidata
Protocol Buffers
Filename extension
.proto
Internet media typeapplication/protobuf, application/vnd.google.protobuf
Developed byGoogle
Latest release
3
Type of formatInterface description language
Open format?Yes
Free format?Yes
Websiteprotobuf.devEdit this at Wikidata

Protocol Buffers (Protobuf) is afree and open-sourcecross-platform data format used toserialize structured data. It is useful in developing programs that communicate with each other over a network or for storing data. The method involves aninterface description language that describes the structure of some data and a program that generates source code from that description for generating or parsing a stream of bytes that represents the structured data.

Overview

[edit]

Google developed Protocol Buffers for internal use and provided acode generator for multiple languages under anopen-source license.

The design goals for Protocol Buffers emphasized simplicity and performance. In particular, it was designed to be smaller and faster thanXML.[3]

Protocol Buffers is widely used at Google for storing and interchanging all kinds of structured information. The method serves as a basis for a customremote procedure call (RPC) system that is used for nearly allinter-machine communication at Google.[4]

Protocol Buffers is similar to theApache Thrift,Ion, and Microsoft Bond protocols, offering a concrete RPCprotocol stack to use for definedservices calledgRPC.[5]

Data structure schemas (calledmessages) and services are described in a proto definition file (.proto) and compiled withprotoc. This compilation generates code that can be invoked by a sender or recipient of these data structures. For example,example.pb.cc andexample.pb.h are generated fromexample.proto. They defineC++ classes for each message and service inexample.proto.

Canonically, messages are serialized into abinarywire format which is compact,forward- andbackward-compatible, but notself-describing (that is, there is no way to tell the names, meaning, or full datatypes of fields without an external specification). There is no defined way to include or refer to such an external specification (schema) within a Protocol Buffers file. The officially supported implementation includes anASCII serialization format,[6] but this format—though self-describing—loses the forward- and backward-compatibility behavior, and is thus not a good choice for applications other than human editing and debugging.[7]

Though the primary purpose of Protocol Buffers is to facilitate network communication, its simplicity and speed make Protocol Buffers an alternative to data-centric C++ classes and structs, especially where interoperability with other languages or systems might be needed in the future.

Limitations

[edit]

Protobufs have no single specification.[8] The format is best suited for small data chunks that don't exceed a few megabytes and can be loaded/sent into memory right away and therefore is not a streamable format.[9] The library doesn't provide compression out of the box. The format also isn't well supported in non–object-oriented languages (e.g.Fortran).[10]

Example

[edit]

A schema for a particular use of protocol buffers associates data types with field names, using integers to identify each field. (The protocol buffer data contains only the numbers, not the field names, providing some bandwidth/storage savings compared with systems that include the field names in the data.)

// polyline.protosyntax="proto2";messagePoint{requiredint32x=1;requiredint32y=2;optionalstringlabel=3;}messageLine{requiredPointstart=1;requiredPointend=2;optionalstringlabel=3;}messagePolyline{repeatedPointpoint=1;optionalstringlabel=2;}

The "Point" message defines two mandatory data items,x andy. The data itemlabel is optional. Each data item has a tag. The tag is defined after the equal sign. For example,x has the tag 1.

The "Line" and "Polyline" messages, which both use Point, demonstrate how composition works in Protocol Buffers. Polyline has arepeated field, and thus Polyline behaves like a set of points (of unspecified number).

This schema can subsequently be compiled for use by one or more programming languages. Google provides a compiler calledprotoc which can produce output for C++, Java or Python. Other schema compilers are available from other sources to create language-dependent output for over 20 other languages.[11]

For example, after a C++ version of the protocol buffer schema above is produced, a C++ source code file, polyline.cpp, can use the message objects as follows:

// polyline.cpp#include"polyline.pb.h"  // generated by calling "protoc polyline.proto"Line*createNewLine(conststd::string&name){// create a line from (10, 20) to (30, 40)Line*line=newLine;line->mutable_start()->set_x(10);line->mutable_start()->set_y(20);line->mutable_end()->set_x(30);line->mutable_end()->set_y(40);line->set_label(name);returnline;}Polyline*createNewPolyline(){// create a polyline with points at (10,10) and (20,20)Polyline*polyline=newPolyline;Point*point1=polyline->add_point();point1->set_x(10);point1->set_y(10);Point*point2=polyline->add_point();point2->set_x(20);point2->set_y(20);returnpolyline;}

Language support

[edit]

Protobuf 2.0 provides acode generator forC++,Java,C#,[12] andPython.[13]

Protobuf 3.0 provides a code generator forC++,Java (including JavaNano, a dialect intended forlow-resource environments),Kotlin,Python,Go,Ruby,Objective-C,C#,PHP,Dart.[14] It also supports JavaScript since 3.0.0-beta-2.[15]

Third-party implementations are also available forAda,[16]Ballerina,[17]C,[18][19]C++,[20]Dart,Elixir,[21][22]Erlang,[23]Haskell,[24]JavaScript,[25]Julia,[26]Nim,[27]Perl,PHP,Prolog,[28][29]R,[30]Rust,[31][32][33]Scala,[34] andSwift.[35]

See also

[edit]

References

[edit]
  1. ^"Frequently Asked Questions | Protocol Buffers".Google Developers. Retrieved2 October 2016.
  2. ^"Releases - google/protobuf" – viaGitHub.
  3. ^Eishay Smith."jvm-serializers Benchmarks".GitHub. Retrieved2010-07-12.
  4. ^Kenton Varda."A response to Steve Vinoski". Retrieved2008-07-14.
  5. ^"grpc".grpc.io. Retrieved2 October 2016.
  6. ^"text_format.h - Protocol Buffers - Google Code". Retrieved2012-03-02.
  7. ^"Proto Best Practices | Protocol Buffers Documentation". Retrieved2023-05-26.
  8. ^"Overview".protobuf.dev. Retrieved2023-05-28.
  9. ^"Overview".protobuf.dev. Retrieved2023-05-28.
  10. ^"Overview".protobuf.dev. Retrieved2023-05-28.
  11. ^ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting. Code.google.com. Retrieved on 2013-09-18.
  12. ^"Protocol Buffers in C#".Code Blockage. Retrieved2017-05-12.
  13. ^"Protocol Buffers Language Guide".Google Developers. Retrieved2016-04-21.
  14. ^"Language Guide (proto3) | Protocol Buffers".Google Developers. Retrieved2020-08-09.
  15. ^"Release Protocol Buffers v3.0.0-beta-2 · protocolbuffers/protobuf".GitHub. Retrieved2020-08-09.
  16. ^"The Google Protocol Buffers implementation in Ada".
  17. ^"Ballerina - GRPC". Archived fromthe original on 2021-11-15. Retrieved2021-03-24.
  18. ^"Nanopb - protocol buffers with small code size". Retrieved2017-12-12.
  19. ^"Protocol Buffers implementation in C".GitHub. Retrieved2017-12-12.
  20. ^"Embedded Proto - Protobuf for microcontrollers". Retrieved2021-08-15.
  21. ^"Protox".GitHub. 25 October 2021.
  22. ^"Protobuf-elixir".GitHub. 26 October 2021.
  23. ^"Tomas-abrahamsson/GPB".GitHub. 19 October 2021.
  24. ^"Proto-lens".GitHub. 16 October 2021.
  25. ^"Protocol Buffers for JavaScript". github.com. Retrieved2016-05-14.
  26. ^"ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting". Retrieved2012-11-07.
  27. ^"Protobuf implementation in pure Nim that leverages the power of the macro system to not depend on any external tools".GitHub. 21 October 2021.
  28. ^"SWI-Prolog: Google's Protocol Buffers Library".
  29. ^"SWI-Prolog / contrib-protobufs".GitHub. Retrieved2022-04-21.
  30. ^"RProtoBuf".GitHub.
  31. ^"Rust-protobuf".GitHub. 26 October 2021.
  32. ^"PROST!".GitHub. 14 November 2025.
  33. ^"Quick-protobuf".GitHub. 12 October 2021.
  34. ^"ScalaPB".GitHub. Retrieved27 September 2022.
  35. ^"Swift Protobuf".GitHub. 26 October 2021.

External links

[edit]
Human
readable
Binary
Google free and open-source software
Software
Applications
Programming languages
Frameworks and
development tools
Operating systems
Related
Retrieved from "https://en.wikipedia.org/w/index.php?title=Protocol_Buffers&oldid=1322092457"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp