Kotlinx CB или сериализация в OutputStream - PullRequest
0 голосов
/ 03 марта 2020

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

...