У меня есть кодируемая структура, которая выглядит следующим образом:
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
?
Можно ли более эффективно сериализовать структуру в двоичный файл?