菜单

其他语言实现

相关源文件

此页面概述了 Protocol Buffer 的 Java 和 Python 实现。这些主要的语言实现属于核心 protobuf 仓库,但未在前面的部分中涵盖。有关 PHP 和 Ruby 实现的信息,请参阅 PHP 和 Ruby 集成。有关 C#、Rust 和 Objective-C 实现的信息,请参阅各自的页面 C# 实现Rust 实现Objective-C 实现

Java 实现

Protocol Buffers 的 Java 实现为 Java 应用程序提供了强大的协议缓冲区消息编码和解码工具集。

结构与组件

Java 实现由 Maven 管理的多个模块组成

来源: java/pom.xml284-291 java/bom/pom.xml59-73

Java 实现包含

  1. 核心 (protobuf-java) - 具有完整消息处理能力的主要 Java 实现
  2. 精简版 (protobuf-java-lite) - 针对 Android 和资源受限环境优化的精简版
  3. 工具 (protobuf-java-util) - 包括 JSON 转换工具的附加实用程序
  4. Kotlin - Protocol Buffers 的 Kotlin 语言扩展
  5. Kotlin 精简版 - 轻量级 Kotlin 扩展

版本信息

Java 实现的版本为 4.31.0,如项目配置所示。

主要功能

  • 与其他 Protocol Buffer 实现完全兼容
  • 优化的二进制格式序列化和反序列化
  • 用于动态消息处理的反射功能
  • 通过 Lite Runtime 支持 Android
  • Kotlin 语言集成
  • Maven Central 分发

构建与分发

Java 实现使用 Maven 进行构建和依赖管理。Maven 配置包括

  • 支持 Java 8+
  • 符合 Android API 级别 21
  • 通过 Sonatype 将工件部署到 Maven Central

来源: java/pom.xml5-27 java/pom.xml108-206 java/bom/pom.xml47-55

Python实现

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 实现包括

  1. 纯 Python 代码 - 用 Python 编写的核心实现
  2. C++ 扩展 - 用 C++ 实现的性能关键组件
  3. Wire Format - 二进制编码和解码
  4. Descriptor System - 消息类型元数据
  5. 未知字段支持 - 用于处理消息中的意外字段

特殊测试功能

Python 实现包括专门的测试工具,例如引用泄漏检测

来源: python/google/protobuf/internal/testing_refleaks.py44-106

引用泄漏检查器通过多次运行测试并比较执行前后 Python 的引用计数来帮助检测内存泄漏。这对于 C++ 扩展组件尤其重要。

Wire Format 实现

Python 实现包括一个处理协议缓冲区消息二进制编码的 wire format 模块

来源: python/google/protobuf/internal/wire_format.py17-30 python/google/protobuf/internal/wire_format.py57-157

跨平台考量

Protocol Buffers 实现旨在跨各种平台和架构工作,并对不同环境进行特别考虑。

架构支持

代码包含针对不同 CPU 架构的特定处理

架构详情平台宏
x86_6464 位 x86GOOGLE_PROTOBUF_ARCH_X64, GOOGLE_PROTOBUF_ARCH_64_BIT
IA3232 位 x86GOOGLE_PROTOBUF_ARCH_IA32, GOOGLE_PROTOBUF_ARCH_32_BIT
ARMARM 处理器GOOGLE_PROTOBUF_ARCH_ARM, GOOGLE_PROTOBUF_ARCH_32_BIT 或 GOOGLE_PROTOBUF_ARCH_64_BIT
AARCH6464 位 ARMGOOGLE_PROTOBUF_ARCH_AARCH64, GOOGLE_PROTOBUF_ARCH_64_BIT
MIPSMIPS 处理器GOOGLE_PROTOBUF_ARCH_MIPS 或 GOOGLE_PROTOBUF_ARCH_MIPS64
SPARCSPARC 处理器GOOGLE_PROTOBUF_ARCH_SPARC
PowerPCPowerPC 处理器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线程局部存储处理
EmscriptenGOOGLE_PROTOBUF_OS_EMSCRIPTENWebAssembly 支持
Native ClientGOOGLE_PROTOBUF_OS_NACLGoogle 的 Native Client 平台
SolarisGOOGLE_PROTOBUF_OS_SOLARISSPARC 平台支持
AIXGOOGLE_PROTOBUF_OS_AIXIBM AIX 平台
AndroidGOOGLE_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 NanoBrian Duff, Tom Chao, Max Cai, Ulas Kirazci

来源: CONTRIBUTORS.txt4-26

语言支持矩阵

以下是 Protocol Buffer 语言实现及其特点的摘要

语言实现类型位置版本主要用例
Java原生java/4.31.0服务器应用程序、Android
Python原生 + C++ 扩展python/6.31.0数据处理、脚本
C++核心src/-性能关键应用程序
C#.NETcsharp/3.31.0.NET 应用程序
PHPPHP + Cphp/4.31.0Web 应用程序
RubyRuby + Cruby/4.31.0Web 应用程序、脚本
Objective-C原生objectivec/4.31.0iOS、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