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 是一个非常好的替代选择。

相关推荐
绝无仅有3 小时前
某大厂跳动Java面试真题之问题与解答总结(五)
后端·面试·github
绝无仅有3 小时前
某大厂跳动Java面试真题之问题与解答总结(四)
后端·面试·github
逛逛GitHub4 小时前
推荐 2 个 GitHub 上集成 Nano banana 的开源项目。
github
拐爷老拐瘦5 小时前
TalkReplay:把你的 AI 对话,变成可复盘、可分享的生产力
github
FreeBuf_7 小时前
GitHub Copilot 提示注入漏洞导致私有仓库敏感数据泄露
github·copilot
cmdyu_7 小时前
国内如何升级GitHub Copilot到专业版
github·copilot·ai编程
吃饺子不吃馅8 小时前
小明问:要不要加入创业公司?
前端·面试·github
掘金安东尼9 小时前
⏰前端周刊第435期(2025年10月6日–10月12日)
前端·javascript·github
qq_339191149 小时前
aws ec服务器设置密码登录,ec服务器root登录 aws服务器初始化配置
服务器·github·aws