Kotlin/Java 列表Protobuf序列化

本来想保存一些Protobuf生成的类的实例到本地,方法自然就是把一个列表的数据序列化成bytes,然后存起来。不过 搞了半天都没办法,于是就自己整了一个 “poor man’s serialization for list of protobuf object”。

方法很简单,首先遍历 List<Cashapp.Bookkeeping> ,依次调用 toByteArray() 得到 []byte,然后进行 Base64编码,就得到了字符串。然后把多个字符串用某个字符串拼接,例如 ; 或者 \n,最后写入,如果是写文件的话, 也可以直接bytes写入。

那么反序列化,就按着上面步骤,反过来执行即可。

代码:

private fun saveBKList(bkList: List<Cashapp.Bookkeeping>) {
    val encodedBKList = ArrayList<String>()

    for (i in bkList) {
        encodedBKList.add(Base64.encodeToString(i.toByteArray(), Base64.DEFAULT))
    }

    kv.encode("latest_bk_list", encodedBKList.joinToString("\n"))
}

不过最后我还是没有执行这一步,因为虽然把列表缓存下来了,打开App时可以直接显示最近一次的列表,但是此时用户还没登录, 感觉怪怪的。


更多文章
  • 自动升级Docker容器
  • 再读《程序员修炼之道-从小工到专家》
  • 让浏览器下载文件
  • 再读《软件随想录》/《黑客与画家》/《软技能》
  • HTTP 压力测试中的 Coordinated Omission
  • 2的补码
  • 编程语言中的 context 是什么?
  • flutter macOS 构建出错
  • Flatpak 使用小记
  • Golang CAS 操作是怎么实现的
  • PostgreSQL 当MQ来使用
  • Clash 结合 工作VPN 的网络设计
  • 使用 PostgreSQL 搭建 JuiceFS
  • PostgreSQL 配置优化和日志分析
  • 有GitHub Copilot?那就可以搭建你的ChatGPT4服务