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

相关推荐
Pluto53819 分钟前
第一个app产品的迭代
ios·github
liuccn1 小时前
Ubuntu 22.04 离线升级 OpenSSH 到 9.8p1
linux·ubuntu·github
fruge2 小时前
GitHub Actions CI/CD 自动化部署完全指南
ci/cd·自动化·github
lkbhua莱克瓦242 小时前
Java练习——正则表达式2
java·开发语言·笔记·正则表达式·github·学习方法
ZhiqianXia14 小时前
github 软件安全术语
安全·github
苦学编程的谢15 小时前
Redis_3_Redis介绍+常见命令
数据库·redis·github
Rverdoser18 小时前
制作网站的价格一般由什么组成
前端·git·github
叹雪飞花19 小时前
借助Github Action实现通过 HTTP 请求触发邮件通知
后端·开源·github
赵文宇19 小时前
构建内网离线的"github.com",完美解决内网Go开发依赖
github
逛逛GitHub21 小时前
国产首个开源 AI 原生后端平台,这次是真起飞了。
后端·github