Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Вклады
                Кубы - Структура Блочного Мира
                    Инструменты
                        Сериализация

Сериализация

Опубликованно: 25.06.2017, 22:45
Последняя редакция, Andry: 25.06.2017 23:41

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

«Кубы поддерживают сериализацию битов — вы можете экспортировать свой ландшафт блока в любое время в строку бит, большую часть времени обрабатываемую как массив byte[]. Позже, полный ландшафт может быть воссоздан этими необработанными байтами.

Сериализация

Итак, как мы преобразуем весь блочный мир в байты?

byte[] serializedTerrainData = CubesSerializer.writeToBytes(blockTerrain);

Ну … Это было довольно легко, или? Вам не нужно беспокоиться о том, как ваш ландшафт волшебным образом сжимается в данные, фреймворк напрямую предлагает вам байты, необходимые для воссоздания всего.

Передача данных

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

Десериализации

На этом этапе вы успешно получили байты и хотите воссоздать свой удивительный блочный мир. Вот как вы это делаете:

//Старый blockTerrain будет полностью заменен!
//(Даже количество кусков будет скорректировано)
BlockTerrainControl blockTerrainClone = new BlockTerrainControl(new Vector3Int());
CubesSerializer.readFromBytes(blockTerrain, serializedTerrainData);

На этом скриншоте показан рельеф местности и его десериализованный клон. Обратите внимание, что блоки должны быть зарегистрированы в том же порядке с обеих сторон, чтобы воспроизводить одну и ту же местность!

test_serialize

Возможные сценарии

Наиболее типичными примерами сериализации являются следующие:

Приложение  Передача данных Информация 
Сетевой  Байты отправляются в сообщении по сети. Клиент получает их и может воссоздать блочный мир. Spidermonkey 
Файлы  Байты сохраняются в файле, который может быть загружен в другой раз. java.io.File 

Дополнительно: BitSerializing

В этой части статьи будет рассмотрен более продвинутый способ доступа к битовому сериализатору фреймворка. Пока это еще не написано, ознакомьтесь с классами cubes.network.BitInputStream, cubes.network.BitOutputStream и интерфейсом cubes.network.BitSerializable, который реализован классом cubes.BlockTerrainControl.


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.