wire 库介绍

Wire 库介绍

Wire ​ 是 Square 公司开发的一个开源、独立实现的 ​Protocol Buffers​ 库,主要用于 Java、Kotlin 和 Swift 平台。

1. 核心定位:为什么需要 Wire?

  • 协议缓冲区(Protocol Buffers)​ :是 Google 推出的一种数据序列化机制,用于高效地序列化结构化数据。它包含一个定义数据结构的模式语言(.proto文件)和一个紧凑的二进制编码格式。
  • 独立实现:虽然 Wire 兼容 Google 的 Protocol Buffers 语法和编码,但它是 Square 从头开始编写的,并非基于 Google 的官方 Java 版本。这使得 Wire 可以做出更适合现代移动端和应用开发的设计决策。

2. 主要特点和优势

Wire 的设计哲学强调简洁、清晰和高性能,特别针对 Android 和 Java 平台进行了优化。

  1. 简洁生成的代码

    • Java :为每个 message 生成一个包含 public final字段的不可变模型类和一个构建器(Builder)。代码简洁,类似于手写,减少了生成的代码量和运行时开销。
    • Kotlin :生成的数据类(data-class-like)使用 copy方法进行修改,而不是构建器,更符合 Kotlin 习惯。
    • Swift :生成结构体(struct),具有值语义,并符合 Equatable, Codable, Sendable等协议。
  2. 独特的字段命名规则

    • 坚持使用 .proto文件中声明的原始字段名(如 picture_urls),而不是自动转换为驼峰命名(如 pictureUrls)。
    • 优点 :在 schema、代码和数据之间导航时无需进行名称映射,便于使用 grep等工具搜索,并提醒开发者这是特殊的数据协议对象。
  3. 始终使用装箱类型(对于 Java)​

    • 所有字段(即使是基本类型)在 Java 中都是对象(如 String, Integer)。如果字段在编码数据中不存在,其值就是 null
    • 优点 :直接支持可选字段和模式演化。对于缺失的字段,可以使用 Wire.get()工具方法方便地提供默认值。
  4. 多语言支持

    • 第一优先:对 Java、Kotlin 和 Swift 提供成熟的支持。
    • Swift 状态:Swift 支持被视为 "Beta",但已被 Square(Block)在生产环境中使用。
  5. 支持 gRPC

    • 从 3.0.0 版本开始,Wire 提供了对 gRPC 的支持,可以用于构建客户端和服务器。
  6. 模式修剪

    • 编译器可以只生成你指定的 message 类型及其依赖项,而不是整个 .proto文件中的所有内容。这在大型共享 schema 中非常有用,允许客户端只使用它们需要的那一部分。

3. 不支持的官方 Protocol Buffers 特性

为了保持简洁和高效,Wire 明确不支持一些官方特性:

  • Groups(已过时)
  • 大部分自定义选项(除了 message 和 field 上的选项)

4. 如何使用

  1. 定义 Schema ​:编写你的 .proto文件。

  2. 生成代码​:使用 Wire 提供的编译器(可通过 Gradle 插件或命令行使用)来生成对应语言的代码。

  3. 添加依赖​:在项目中引入 Wire 的运行时库。

    • Maven/Gradle 依赖 :例如 com.squareup.wire:wire-runtime:4.9.2

总结

Wire 是一个高性能、设计理念现代的 Protocol Buffers 实现,它通过生成更简洁、更直观的代码,为 Java、Kotlin 和 Swift 开发者提供了更好的开发体验。​​ 尤其适合那些追求代码简洁性、高性能以及在 Android 和 Java 生态中进行开发的团队。如果你对官方 Protobuf 库的冗长代码或某些设计感到不满,Wire 是一个非常好的替代选择。

相关推荐
James_WangA9 小时前
我给 AOI 设备装了一个 Agent,然后发现工具注册才是最难写的
架构·github
James_WangA9 小时前
产线上跑 Agent:LLM 挂了不是 500 错误,是停线
架构·github
Hommy8814 小时前
【开源剪映小助手】字幕接口
开源·github·aigc·剪映小助手·视频剪辑自动化
一袋米扛几楼9816 小时前
【Git】规范化协作:详解 GitHub 工作流中的 Issue、Branch 与 Pull Request 最佳实践
前端·git·github·issue
尘埃落定wf16 小时前
# GitHub CLI:告别繁琐的 Git 命令,让开发更高效
git·github
zh_xuan17 小时前
上传api调试工具到github
github
AIMath~19 小时前
彻底删除 GitHub 仓库中特定文件夹的完整指南
github
DogDaoDao20 小时前
【GitHub】OpenClaw:开源个人AI助手的新标杆
人工智能·深度学习·开源·大模型·github·ai编程·opeclaw
一点一木1 天前
🚀 2026 年 4 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
宝桥南山1 天前
AI - 在命令行中尝试一下ACP(Agent Client Protocol)通信
microsoft·微软·github·aigc·copilot