Моё (ложное) высказывание было основано на неправильно понятой строке «Композитные расширения типов» из ru.wikipedia.org/wiki/Apache_Thrift. Можете подсказать что это значит?
1 В UTF-8 идея похожая, но система кодирования значительно сложнее и позволяет представить 6 байт максимум. Если вместо UTF-8 использовать эту схему, то ASCII алфавит остается валидным, а остальные символы на много легче обрабатывать.
2,3 Уровни 2 и 3 описывают применение формата DSV как раз для кодирования длины последующих данных. Такой формат обеспечивает фрактальность объектов.
А вообще не очень понятно, почему бы сразу не сжимать данные Лемпелем-Зивом или что там сейчас в моде?
Задача о сжатии данных не стояла, только «эффективная упаковка данных».
Protocol Buffers — очень хорошая библиотека для сериализации статических типов данных, буду использовать для других целей — спасибо!
Похоже, что Thrift не умеет работать с составными типами. Это очень существенный минус.
Спасибо, ознакомился!
По поводу ASN.1 — это уже глубокое и очень сложное кодирование. Да и 11 типов строк из которых реально я бы использовал штуки 3-5 — сильно избыточно.
По поводу KLV — концепция ключ-значение очень фундаментальна.
Ключи в KLV могут быть 1,2,4 или 16 байт (не понятно почему нет 8-ми). Нельзя использовать строку как ключ. Меня это не устраивает.
Длина (BER) кодируется очень похожим способом, но обладает большей избыточностью на диапазоне [256;256^7].
Карта std::map< DSV1, DSV2 > позволяет представить более широкий диапазон ключей и значений, которые с легкостью могут быть сериализированы.
Когда-то мне очень не хватало такого инструмента…
Чем более совпадают контексты высших порядков, тем проще понять объектам друг друга.
Ваши идеи оптимальны! :)
2,3 Уровни 2 и 3 описывают применение формата DSV как раз для кодирования длины последующих данных. Такой формат обеспечивает фрактальность объектов.
Задача о сжатии данных не стояла, только «эффективная упаковка данных».
Похоже, что Thrift не умеет работать с составными типами. Это очень существенный минус.
По поводу ASN.1 — это уже глубокое и очень сложное кодирование. Да и 11 типов строк из которых реально я бы использовал штуки 3-5 — сильно избыточно.
По поводу KLV — концепция ключ-значение очень фундаментальна.
Ключи в KLV могут быть 1,2,4 или 16 байт (не понятно почему нет 8-ми). Нельзя использовать строку как ключ. Меня это не устраивает.
Длина (BER) кодируется очень похожим способом, но обладает большей избыточностью на диапазоне [256;256^7].
Карта std::map< DSV1, DSV2 > позволяет представить более широкий диапазон ключей и значений, которые с легкостью могут быть сериализированы.