Wire:整洁的轻量级协议缓存

wire

Wire是一个简洁的轻量级协议缓存,针对Android与Java平台。Wire与Square无关,是完全独立的缓存实现,特别针对Android与Java平台设计。

功能特性

对schema中定义的每种消息类型,Wire都会生成一个不可变(immutable)模型类及builder。生成的代码质量与手写一致,代码包含文档说明、已排版并且非常简洁。如果你喜欢Effective Java,相信Wire的API会让你感到非常亲切。

也就是说,Wire的设计包含了以下特点:

  • Wire消息声明:放弃通常的getter方法,使用public final字段,简化了代码生成与代码执行。减少代码量在Android应用中的好处尤其明显。
  • Wire避免了大小写映射:在schema中定义的picture_urls字段,会对应生成名为picture_urls的Java字段,而非传统的pictureUrls驼峰式命名。尽管名称开始看起来有些怪,对于grep或者其他复杂的搜索工具来说却很方便。这种做法不再需要schema、Java源代码、数据之间的映射。不仅如此,在调用特殊的消息时还能起到友好的提示。
  • 基础类型装箱:如果缺少某个字段,它的值null,适用于非必须的字段。例如恐龙锁处的时间代未知。在schema升级的过程中字段也可能变为null:如果明天再消息中增加一个carnivore的boolean字段,那么今天的数据中则会缺少这个字段。

下载

wire-runtime包含了使用Wire生成代码的应用程序运行时必须包含的支持库:

Maven

Gradle

开发版本的镜像可以从Sonatype snapshots仓库下载。

使用示例

定义Dinosaur消息

下面是一个消息定义示例:

这是一个enum定义:

生成的Java代码

下面是Dinosaur消息生成的一个紧凑的定义:

创建proto模型访问的Java代码非常简洁,可读性很好:

每个类型都有一个对应的ProtoAdapter,可以把消息编码为字节并把字节解码为消息。

访问字段时,使用Wire.get()用默认值替换null:

上面的操作与下面等价:

生成代码工具

Wire编译器可以通过Maven插件安装。把 .proto 源代码放到项目中 src/main/proto 的目录,通过插件生成 .java 文件。插件会自动把生成的Java代码添加到项目源代码根目录。

Wire从本地文件与.jar文件中读取.proto文件。

编译器会将schema删减为一组根类型(root type)子集,并处理相关的类型。这在项目之前分享schema信息非常有用:Java服务与Android app可以使用共享schema的一组子集。

如果不用Maven,编译器还提供了一组命令行接口。只要将wire-compiler-VERSION-jar-with-dependencies.jar替换为jar路径即可。

如果使用Proguard,需要添加keep规则。最简单的方式是让Proguard不要访问Wire运行时库与生成的协议缓存(当然这些代码也就不会被优化处理):

使用许可

Wire遵循Apache 2.0开源协议发布。

开源地址:https://github.com/square/wire

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

1 收藏

资源整理者简介:唐尤华

唐尤华:我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员。 个人主页 · 贡献了108个资源 · 18 ·    


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer