Skip to content

Repository files navigation

Packbele

Maven Central | English

1. 概述

Packable是一个高效易用的序列化框架。
可以用于对象序列化/反序列化,消息封装等,从而方便本地存储或网络传输。

Packable有以下优点:

  • 1、编码/解码快速。
  • 2、编码紧凑,体积小。
  • 3、支持版本兼容(增删字段不影响整体的解析)。
  • 4、代码轻量。
  • 5、支持多种类型。
  • 6、支持多种语言,可跨平台传输。

Packable目前实现了Java、Kotlin、C++、C#、Objective-C、Go等版本。

2. 使用方法

Java和Kotlin版本代码已发布到Maven仓库,路径如下:

java:

dependencies {
implementation 'io.github.billywei01:packable-java:2.1.2'
}

kotlin:

dependencies {
implementation 'io.github.billywei01:packable-kotlin:2.1.3'
}

以下以Kotlin版本的用法为例。

假设类型定义如下:

data classPerson(
valname:String,
valage:Int
)

可以定义类型适配器如下:

object PersonAdapter : TypeAdapter<Person> {
overridefunencode(encoder:PackEncoder, target:Person) {
encoder
.putString(0, target.name)
.putInt(1, target.age)
}
overridefundecode(decoder:PackDecoder): Person {
returnPerson(
name = decoder.getString(0),
age = decoder.getInt(1)
)
}
}

序列化/反序列化:

privatefuntestEncodeObject() {
val person =Person("Tom", 20)
val encoded =PersonAdapter.encode(person)
val decoded =PersonAdapter.decode(encoded)
println("Person: ${person == decoded}")
}
privatefuntestEncodeObjectList() {
val list =listOf(
Person("Tom", 20),
Person("Mary", 18)
)
val encoded =PersonAdapter.encodeObjectList(list)
val decoded =PersonAdapter.decodeObjectList(encoded)
println("Person list: ${list == decoded}")
}

3. 性能测试

测试对象:

  • Packable
  • Protobuf
  • Gson

测试设备: Macbook Pro

测试代码:Main

测试结果:

数据大小(byte)序列化(ms)反序列化(ms)
packable2564756 (56%)88
protobuf2627081 (59%)1617
gson4427344 (100%)5850

4. 关联文档

https://juejin.cn/post/6992380683977130015/

License

See the LICENSE file for license rights and limitations.

About

An effective and well designed serialization framework.

Topics

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages