此页面概述了 Protocol Buffer 的 Java 和 Python 实现。这些主要的语言实现属于核心 protobuf 仓库,但未在前面的部分中涵盖。有关 PHP 和 Ruby 实现的信息,请参阅 PHP 和 Ruby 集成。有关 C#、Rust 和 Objective-C 实现的信息,请参阅各自的页面 C# 实现、Rust 实现 和 Objective-C 实现。
Protocol Buffers 的 Java 实现为 Java 应用程序提供了强大的协议缓冲区消息编码和解码工具集。
Java 实现由 Maven 管理的多个模块组成
来源: java/pom.xml284-291 java/bom/pom.xml59-73
Java 实现包含
Java 实现的版本为 4.31.0,如项目配置所示。
Java 实现使用 Maven 进行构建和依赖管理。Maven 配置包括
来源: java/pom.xml5-27 java/pom.xml108-206 java/bom/pom.xml47-55
Python 实现为 Python 开发者提供了在其应用程序中使用 Protocol Buffers 的能力。
Python 实现包括纯 Python 代码和用于性能优化的 C++ 扩展
来源: python/google/protobuf/__init__.py10 python/google/protobuf/pyext/descriptor_pool.h27-73 python/google/protobuf/pyext/field.h21-29 python/google/protobuf/pyext/unknown_field_set.h28-50
Python 实现包括
Python 实现包括专门的测试工具,例如引用泄漏检测
来源: python/google/protobuf/internal/testing_refleaks.py44-106
引用泄漏检查器通过多次运行测试并比较执行前后 Python 的引用计数来帮助检测内存泄漏。这对于 C++ 扩展组件尤其重要。
Python 实现包括一个处理协议缓冲区消息二进制编码的 wire format 模块
来源: python/google/protobuf/internal/wire_format.py17-30 python/google/protobuf/internal/wire_format.py57-157
Protocol Buffers 实现旨在跨各种平台和架构工作,并对不同环境进行特别考虑。
代码包含针对不同 CPU 架构的特定处理
| 架构 | 详情 | 平台宏 |
|---|---|---|
| x86_64 | 64 位 x86 | GOOGLE_PROTOBUF_ARCH_X64, GOOGLE_PROTOBUF_ARCH_64_BIT |
| IA32 | 32 位 x86 | GOOGLE_PROTOBUF_ARCH_IA32, GOOGLE_PROTOBUF_ARCH_32_BIT |
| ARM | ARM 处理器 | GOOGLE_PROTOBUF_ARCH_ARM, GOOGLE_PROTOBUF_ARCH_32_BIT 或 GOOGLE_PROTOBUF_ARCH_64_BIT |
| AARCH64 | 64 位 ARM | GOOGLE_PROTOBUF_ARCH_AARCH64, GOOGLE_PROTOBUF_ARCH_64_BIT |
| MIPS | MIPS 处理器 | GOOGLE_PROTOBUF_ARCH_MIPS 或 GOOGLE_PROTOBUF_ARCH_MIPS64 |
| SPARC | SPARC 处理器 | GOOGLE_PROTOBUF_ARCH_SPARC |
| PowerPC | PowerPC 处理器 | GOOGLE_PROTOBUF_ARCH_POWER 或 GOOGLE_PROTOBUF_ARCH_PPC |
来源: src/google/protobuf/stubs/platform_macros.h14-79
Protocol Buffers 为各种操作系统提供了特定的优化和处理
| 操作系统 | 宏 | 特殊处理 |
|---|---|---|
| Apple (macOS, iOS) | GOOGLE_PROTOBUF_OS_APPLE, GOOGLE_PROTOBUF_OS_IPHONE | 线程局部存储处理 |
| Emscripten | GOOGLE_PROTOBUF_OS_EMSCRIPTEN | WebAssembly 支持 |
| Native Client | GOOGLE_PROTOBUF_OS_NACL | Google 的 Native Client 平台 |
| Solaris | GOOGLE_PROTOBUF_OS_SOLARIS | SPARC 平台支持 |
| AIX | GOOGLE_PROTOBUF_OS_AIX | IBM AIX 平台 |
| Android | GOOGLE_PROTOBUF_OS_ANDROID | 线程局部存储替代方案 |
来源: src/google/protobuf/stubs/platform_macros.h81-113
Protocol Buffers 项目由跨语言和实现的大量贡献者开发
| 语言 | 主要作者/贡献者 |
|---|---|
| C++ (Proto2) | Kenton Varda |
| Java (Proto2) | Kenton Varda |
| Python (Proto2) | Will Robinson, Petar Petrov |
| Java Nano | Brian Duff, Tom Chao, Max Cai, Ulas Kirazci |
以下是 Protocol Buffer 语言实现及其特点的摘要
| 语言 | 实现类型 | 位置 | 版本 | 主要用例 |
|---|---|---|---|---|
| Java | 原生 | java/ | 4.31.0 | 服务器应用程序、Android |
| Python | 原生 + C++ 扩展 | python/ | 6.31.0 | 数据处理、脚本 |
| C++ | 核心 | src/ | - | 性能关键应用程序 |
| C# | .NET | csharp/ | 3.31.0 | .NET 应用程序 |
| PHP | PHP + C | php/ | 4.31.0 | Web 应用程序 |
| Ruby | Ruby + C | ruby/ | 4.31.0 | Web 应用程序、脚本 |
| Objective-C | 原生 | objectivec/ | 4.31.0 | iOS、macOS 应用程序 |
| Rust | 原生 | - | - | 系统编程 |
来源: java/pom.xml7 python/google/protobuf/__init__.py10 php/ext/google/protobuf/protobuf.h35 ruby/google-protobuf.gemspec3 csharp/src/Google.Protobuf/Google.Protobuf.csproj8 Protobuf.podspec8