Я пытаюсь сериализовать очень большой список (несколько сотен МБ) класса данных в 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