Kotlinx CBor序列化到OutputStream

时间:2020-03-03 16:22:52

标签: kotlin serialization cbor kotlinx

我正在尝试将一个很大的数据类列表(几百MB)序列化为cbor。以下工作正常:

val bytes: ByteArray = Cbor.plain.dump(MyClass.serializer().list, listOf(MyClass()))
val tmpFile = File.createTempFile("serialized", "tmp")
tmpFile.writeBytes(bytes)

但是,由于它太大了,我只想立即将这些字节转储到文件中,所以我不想不必一次将整个字节数组都保存在内存中。在源代码中,看来我不能这样做的唯一原因是因为此CBorWriter类是内部类:

override fun <T> dump(serializer: SerializationStrategy<T>, obj: T): ByteArray {
    val output = ByteArrayOutputStream()
    val dumper = CborWriter(CborEncoder(output))
    dumper.encode(serializer, obj)
    return output.toByteArray()
}

更令人困惑的是,CborEncoder类不是,但是似乎没有用,因为它实际上不是Encoder的实现

这使我相信这不是直接写给Outputstream的“方式”

0 个答案:

没有答案