Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > Общие вопросы Web
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2015, 15:38   #1
Foxeestyle
Подтвердите свой е-майл
 
Регистрация: 10.02.2013
Сообщений: 8
Сообщение Спецификация Flash AMF3 и разбор полётов

Вопрос к добрым молодцам, которые сталкивались со спецификацией формата AMF от Adobe, ну или к тем, кто щёлкает спецификации как орешки "на раз-два" :D Целью является накодить удобоваримый парсер для Delphi, но я плаваю в спецификации, в частности, в комплексных байтах, в "traits" и "reference tables".

Первый вопрос. Что такое "traits" мне не ясно вовсе, суть ссылочных таблиц я, в принципе, понимаю, но не понимаю где эти ссылочные таблицы хранятся, как в них записывается значение и тем более как потом по какому-то индексу на это значение ссылается AMF3.

Нагуглено много запросов на эту тему, и вот я нашёл, казалось бы, доступное объяснение структуры формата AMF3 (с AMF0 всё проще). На одном из ресурсов приводится пример кодирования объекта AS3:

this.ui = "button_press";
this.param = 5;

Цитата:
0A - the object tag
Тут всё ясно
Цитата:
2B - u29o-val: 2 sealed members, object with traits and data, possibly dynamic members
И тут напрашивается второй вопрос. 2B это 00101011. Где в этих восьми битах можно лицезреть, что в объекте два элемента и прочие прелести?
Цитата:
01 - empty string -- anonymous object
Тут тоже ясно, вместо типа объекта передаётся пустая строка, следовательно, объект анонимный
Цитата:
05 - string-by-value, string length: 2
00000101. Тут много информации. Должно быть понятно, что передаётся строка, по значению, и ещё и длина тут закодирована. Я не вижу где :/
Цитата:
75 69 - 'ui'
0B - string-by-value, string length: 5
70 61 72 61 6D - 'param'
19 - string-by-value, string length: 12
...
Тут со строками те же вопросы.

Буду благодарен за любую информацию
Foxeestyle вне форума Ответить с цитированием
Старый 30.10.2015, 18:27   #2
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Я в оригинальной доке по-быстрому прочел этот кусок, всё понятно. Вечером попробую расписать из дома.
Vapaamies вне форума Ответить с цитированием
Старый 31.10.2015, 04:46   #3
Freakytools
Новичок
Джуниор
 
Аватар для Freakytools
 
Регистрация: 31.10.2015
Сообщений: 2
По умолчанию

Vapaamies, спасибо за ответы, уже во второй теме Вы единственный, кто указывает путь наружу из сложившейся ситуации Весы жмакнул.
P.S.: Это топикстартер Foxeestyle. С тем аккаунтом у меня возникли проблемы.
Keep calm and love coding
Freakytools вне форума Ответить с цитированием
Старый 31.10.2015, 14:39   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от Freakytools Посмотреть сообщение
уже во второй теме Вы единственный, кто указывает путь наружу из сложившейся ситуации
Меня не покидает ощущение, что на этом форуме я один из немногих, кто пытается вытащить темы на конструктив, а не заполнять однотипными ответами, особенно адекватные темы.

Цитата:
Сообщение от Freakytools Посмотреть сообщение
С тем аккаунтом у меня возникли проблемы.
В таком случае прогноз на самостоятельное освоение неблагоприятный. Либо это будет как посвящение в рыцари.

Моя помощь как, еще нужна? Вчера ночью я, как и обещал, открыл доку Adobe по AMF3, даже скопировал оттуда цитату, но написать ответ уже не было сил.

С точки зрения теории двоичные форматы проигрывают текстовым при хранении чисел: без дополнительных ухищрений для 32-байтного числа всегда расходуется 4 байта, тогда как в текстовом формате однозначные числа занимают один байт. Чтобы не хранить кучу нулей, разработчики двоичных форматов придумывают способы кодирования чисел переменным числом байт. Так сделано в Google Protocol Buffers, так сделано и у Adobe.

У Adobe формат называется U29 и по способу кодирования похож на UTF-8. В доке всё описано. Кодирование UTF-8 расписано в Википедии. Функции UTF8Encode и UTF8Decode есть в модуле System -- можно посмотреть реализацию, как идет работа с битами. Для U29 придется писать что-то похожее.

В разделе "3.12 Object type" описывается хранение флагов, длин, индексов и ссылок в значащей части U29. Вначале идет теория, а потом фактическое описание формата. Записи вида "U29O-traits-ref" -- это БНФ формата, как понял. Ранее в тексте встречается аббревиатура ABNF (Adobe BNF?). Короче, нужно читать, выделять биты и экспериментировать.

Вчера еще Google предлагал мне реализацию AMF3 на PHP. Можно ее скачать и подсматривать. Сам не смотрел. Оставляю в качестве домашнего задания.
Vapaamies вне форума Ответить с цитированием
Старый 01.11.2015, 00:56   #5
Freakytools
Новичок
Джуниор
 
Аватар для Freakytools
 
Регистрация: 31.10.2015
Сообщений: 2
По умолчанию

В очередной раз спасибо огромное, пищи для ума предостаточно, и ясно, в какую сторону смотреть :D
Keep calm and love coding
Freakytools вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос значений таблицы из MS Excel в MS Word. Delphi. Шпаргалка и "разбор полётов". Ship_1 Помощь студентам 8 04.04.2016 13:42
Delphi и AMF0/AMF3 Foxeestyle Работа с сетью в Delphi 3 27.10.2015 14:11
Спецификация стали stas_org Microsoft Office Access 0 09.10.2011 17:59
Спецификация исключений Kn793 Общие вопросы C/C++ 3 28.06.2010 21:26