PropertyListEncoder производит вдвое больше ожидаемых данных - PullRequest
0 голосов
/ 29 января 2020

У меня есть кодируемая структура, которая выглядит следующим образом:

struct Matrix: Codable {
    var values: [Float]
    var rowInds: [Int32]
    var colStarts: [Int]
}

Содержимое моей структуры выглядит так:

values.count * 4 [Bytes per Float] -> 26092468
rowInds.count * 4 [Byte per Int32] -> 26092468
colStarts.count * 4 [Bytes per Int] -> 800488

Это дает в общей сложности 52,985,424 Bytes.

Затем я пытаюсь преобразовать это в Данные, используя PropertyListEncoder следующим образом:

let propertyEncoder = PropertyListEncoder()
propertyEncoder.outputFormat = .binary

let matrix_data = try propertyEncoder.encode(matrix)
print(matrix.count)

Результат этого вызова 113,568,678. Это точно 2x моя оценка.

Почему я вижу разницу между моим оценочным и фактическим размером?

Я сделал ошибку в моей оценке?

есть некоторые отступы, добавленные PropertyListEncoder?

Можно ли более эффективно сериализовать структуру в двоичный файл?

...