The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз системы разбора произвольных бинарных файлов Kaitai St..., opennews (??), 09-Авг-16, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


12. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +1 +/
Сообщение от dq0s4y71 (ok), 10-Авг-16, 13:25 
1) Понимает ли эта штука форматы, изменяющиеся в зависимости, например, от идентификатора в пакете данных?

2) Что оно может, чего не может, например, protocol buffers?

Ответить | Правка | Наверх | Cообщить модератору

13. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +1 +/
Сообщение от GreyCat (ok), 10-Авг-16, 13:27 
> 1) Понимает ли эта штука форматы, изменяющиеся в зависимости, например, от идентификатора
> в пакете данных?

Конечно.

> 2) Что оно может, чего не может, например, protocol buffers?

Разбирать произвольные существующие бинарные форматы - например, те же gif, png, mp3, ogg, avi, iso9660, fat32, elf, zip и т.д.

Ответить | Правка | Наверх | Cообщить модератору

14. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +/
Сообщение от dq0s4y71 (ok), 10-Авг-16, 13:40 
То есть с ним идёт ещё какая-то библиотека существующих форматов?
Ответить | Правка | Наверх | Cообщить модератору

15. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +3 +/
Сообщение от GreyCat (ok), 10-Авг-16, 13:42 
> То есть с ним идёт ещё какая-то библиотека существующих форматов?

Библиотека - в смысле коллекции примеров .ksy-описаний форматов - конечно идет - https://github.com/kaitai-io/kaitai_struct_formats

Но идея, конечно, не в том, что где-то есть какая-то коллекция описаний, а в том что самими средствами языка можно такие форматы разбирать.

Ответить | Правка | Наверх | Cообщить модератору

16. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +/
Сообщение от dq0s4y71 (ok), 10-Авг-16, 14:09 
Ну, protocol buffers, насколько я понимаю, тоже может такие форматы разбирать, меня интересовало, какие преимущества здесь даёт ваша программа.
Ответить | Правка | Наверх | Cообщить модератору

17. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +3 +/
Сообщение от GreyCat (ok), 10-Авг-16, 14:18 
> Ну, protocol buffers, насколько я понимаю, тоже может такие форматы разбирать, меня
> интересовало, какие преимущества здесь даёт ваша программа.

В традиционном виде использования - на самом деле скорее _не_ может. Protobuf в норме описывает не формат сериализации, а саму структуру данных - а формат сериализации при этом будет такой, как удобно protobuf'у. В том числе это означает что по умолчанию формат protobuf - самоописываемый, как JSON / BSON / ASN.1 DER/CER - т.е. получателю не надо знать формат, чтобы понять синтаксис. Перед каждым полем все равно будет идти префикс, который указывает тип поля и тем самым определяет, как его читать/писать, сколько оно байт будет занимать в потоке и т.д.

Можно извращаться (как мне тут недавно подсказали) и некими кастомными расширениями для protobuf в какой-то степени менять формат сериализации (и тем самым достигать возможности читать кастомные форматы), но эти расширения, во-первых, сильно зависят от языка (поэтому  "описал один раз - скомпилировал под все языки" не выйдет), во-вторых, по сути приходится вносить описание формата сериализации в эти расширения, что несколько убивает весь смысл так делать. Если уж все равно писать код на определенном языке - тогда проще сразу парсер написать вручную, без всяких protobuf.

Ответить | Правка | Наверх | Cообщить модератору

18. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +/
Сообщение от dq0s4y71 (ok), 10-Авг-16, 14:37 
ок, спасибо.
Ответить | Правка | Наверх | Cообщить модератору

28. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +/
Сообщение от nuclight (??), 11-Авг-16, 21:09 
Нет, тут немножко в кучу смешалось. Формат protobuf - не самоописываемый. Формат protobuf из приведенного списка эквивалентен ASN.1 - для того, чтобы полноценно пропарсить бинарное сообщение, получателю необходимо иметь описание формата - несмотря на то, что типы и длины в потоке указаны, имен там нет. Упрощенный пример - пришли в пакете два числа, строка, массив из трех чисел? Что это такое, что куда? Вы заранее не знаете, если не согласовать это в парсере - именно за этим компилятор protobuf-языка

Действительно полностью самоописываемым будет JSON (и, например, какая-нибудь вариация XML-схемы, где договорились об указании имен, но это таки согласовать придется опять) - в нем имеются не только типы данных, но и названия этих переменных. Вот такие данные получатель уже сможет пропарсить, не имея заранее описания синтаксиса/схемы (зачем? подумайте, например, о проблеме апгрейда между версияи - убирание старых полей, добавление новых).

Но если нужен бинарный эквивалент JSON, в наше время следует смотреть не на BSON, а на (исправление допущенных ошибок проектирования в) CBOR - он стандартизирован в RFC 7049, очень прост и для парсеров на Си, полностью совместим по модели данных с JSON, расширяем - стандартизирован уже и ряд расширений к нему (например компрессия повторяющихся имен), и кучу имплементаций под все  языки на http://cbor.io/ уже наклепали.

Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

29. "Релиз системы разбора произвольных бинарных файлов Kaitai St..."  +/
Сообщение от GreyCat (ok), 12-Авг-16, 11:03 
JSON вида {"msg": ["foo", 1, 5, 7, [-1.5, -0.5]]} тоже не будет самоописываемым, если работа с msg проводится с помощью массива констант типа такого:

const ENTITY_NAME = 0
const ENTITY_COORDS = 4

и, соответственно, обращение через json.msg[ENTITY_COORDS] = [-1.5, -0.5].

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру