我正在尝试将一个很大的数据类列表(几百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
的“方式”