Как можно перепроектировать двоичный файл экономии?

Предлагаю вам прочитать статьи Наварро, упомянутые в разделе «Ссылки» статьи в Википедии под названием Приблизительное совпадение строк . Принятие решения на основе реальных исследований всегда лучше, чем на основе предложений случайных незнакомцев. Особенно, если для вас важна работа с известным набором записей.

5
задан Teflon Ted 13 October 2009 в 23:10
поделиться

1 ответ

К сожалению, похоже, что бинарный протокол Thrift вообще не выполняет очень много тегов данных; для декодирования предполагается, что у вас есть файл .thrift, поэтому вы знаете, что, скажем, следующие 4 байта должны быть целыми числами, а не являются первой половиной числа с плавающей запятой. Так что, похоже, вы застряли в основном, просматривая файлы в шестнадцатеричном редакторе (или аналогичном) и пытаясь вывести поля на основе точных шаблонов, которые вы видите.

Есть очень несколько полезных битов:

] Каждый файл начинается с версии, строки идентификатора протокола и порядкового номера. Карты будут начинаться с 6 байтов, которые идентифицируют типы ключа и значения (первые два байта в виде целочисленных кодов) плюс количество элементов в виде 4-байтового целого числа. Коды типов кажутся стандартными (каноническое расположение их определений кажется TProtocol.h в источниках Thrift, например, логическое значение определяется кодом типа 2, строка UTF-8 - кодом типа 16 и т. Д.) . Строки предваряются полем целочисленной длины 4 байта, а списки - типом (1 байт) и длиной 4 байта. Похоже, что все целочисленные поля сохраняются с прямым порядком байтов, а числа с плавающей запятой сохраняются в формате IEEE (что, по крайней мере, должно облегчить поиск двойников).

Файлы TBinaryProtocol * в Thrift содержат еще несколько полезных деталей; с другой стороны, существует ряд различных реализаций, поэтому вы можете прочитать те, которые реализованы на языке, который вам наиболее удобен.

Извините, я знаю, что это, вероятно, не так. Это полезно, но действительно кажется, что это вся информация, которую предоставляет двоичный формат Thrift; очевидно, что двоичный формат был разработан с намерением, чтобы вы всегда знали точную спецификацию протокола, и что целью было минимизировать пространство между проводами, а не упростить декодирование вслепую.

8
ответ дан 14 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: