Мы в Telegram
Добавить новость
103news.com
Работа
Март
2022
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
26
27 28 29 30 31

.NET Remoting: Binary Format распаковка в жсон и обратно

0

Описание принципа работы и ограничения для Решения.

# Проблематика

Имеется большое количество файлов и желающих, которые ходят увидеть содержимое и его редактировать. Самый простой способ для представления и редактирования большинству желающих в нашем случае Json.

Важно: все объекты в словаре обязаны кодироваться в жсон нативно (без использования дополнительных энкодеров)

Таким образом у нас обязана получиться конвертилка из nrbf → python dict → json → nrbf.

# Ожидания от решения

- Решение предоставляется в виде скрипта (может быть библиотеки) которое принимает на вход `BytesIO` и выполняется операции по распаковывания/раскладыванию в различные структуры/примитивы.

Примерная изначальная структура исполняющего файла/entrypoints

```jsx

def main(filename):

with open(filename, "rb") as fd:

# Execution_logic

execute(BytesIO(fd.read())

if __name__ == "__main__":

main("filename.dat")

```

В самом скрипте не создавать никаких файлов на файловой системе, папок и других вещей, которые могут храниться на физических носителях.

> Для случаев отладки стоит объекты байтио дампить в файл, но только при помощи сторонней логики.

>

- Важно не только распаковать, но и сохранить заголовки/другую информацию для отладки или последующей работы

- Чуть дальше идет полезный пейлод, в результате преобразования которого обязан получиться чистый жсон, без маркеров и максимальное (по возможности) плоское представление структур из бинарного файла.

К примеры некий тип в жсоне становится что-то вроде

```jsx

{

"_class_name": "WarnetObjectData",

"ObjectID": "Meja Low",

"ObjectPos": {

"_class_name": "UnityEngine_Vector3",

"x": -4.6679840087890625,

"y": 0.41775578260421753,

"z": 15.084839820861816

}

```

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

- Язык решения - питон, который по итогу будет запускать на лямбде. Для питона достаточно готовой библиотеки с интерфейсом

- Файлы, в которых не были изменения в жсоне после запаковки обязаны быть байто-идентичны первоначальному файлу (скип операции не подразумевается, именно честное выполнение)

# Примеры реализации

- спецификация от майкрософт [https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrbf/75b9fe09-be15-475f-85b8-ae7b7558cfe5](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrbf/75b9fe09-be15-475f-85b8-ae7b7558cfe5)

- классный разбор на стек оверфлоу как файл устроен внутри [https://stackoverflow.com/questions/3052202/how-to-analyse-contents-of-binary-serialization-stream/30176566#30176566](https://stackoverflow.com/questions/3052202/how-to-analyse-contents-of-binary-serialization-stream/30176566#30176566)

- шикарная реализация читателя, но увы сразу дампят в жсон из кастомных классов или именнованных кортежей [https://github.com/gurnec/Undo_FFG/blob/master/nrbf.py](https://github.com/gurnec/Undo_FFG/blob/master/nrbf.py)

- [https://github.com/addisonElliott/pypdn/blob/s/pypdn/nrbf.py#L218](https://github.com/addisonElliott/pypdn/blob/s/pypdn/nrbf.py#L218) неплохое решение, даже более читаемое пусть и базируется на предыдущем

# Тестовые файлы

[https://disk.yandex.by/d/g0pgvoSyYh4PPA](https://disk.yandex.by/d/g0pgvoSyYh4PPA)





Губернаторы России
Москва

Неделя мэра: завод «Москвич», гранты для школ искусств и система городских вокзалов





Москва

Стартовал финальный этап всероссийского футбольного турнира «Будущее зависит от тебя»


Губернаторы России

103news.net – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.

Moscow.media
Москва

Неделя мэра: завод «Москвич», гранты для школ искусств и система городских вокзалов



103news.comмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "103 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. 103news.com — облегчённая версия старейшего обозревателя новостей 123ru.net.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

103news.com — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.

Музыкальные новости

Баста

Племя Гунны: рэпер из США в меланхолии, наш Баста — в музлитературе




Спорт в России и мире

Алексей Смирнов – актер, которого, надеюсь, еще не забыли

В Подмосковье сотрудники ОМОН «Русич» Росгвардии приняли участие в церемонии открытия соревнований по дзюдо среди детей и подростков

Строительные леса обрушились у здания спортшколы на Новочеремушкинской улице

Семьи из Подмосковья поборются за выход в финал конкурса «Это у нас семейное»


Карен Хачанов

Хачанов проиграл Табило в 1/8 финала «Мастерса» в Риме



Новости Крыма на Sevpoisk.ru


Эвелина Блёданс

Эвелина Блёданс: Солнечная сказка для солнечных детей



Частные объявления в Вашем городе, в Вашем регионе и в России