#c# #unity3d
#c# #unity3d
Вопрос:
Моя проблема заключается в следующем: я сериализую данные и отправляю их в PlayerPrefs
BitStream bitStream = new BitStream(isTypeSafe);
bitStream.WriteByte(species);
bitStream.WriteInt32(revision);
PlayerPrefs.SetString(species.ToString(), bitStream.ToString());
и затем я пытаюсь десериализовать данные:
BitStream bitStream = new BitStream(isTypeSafe);
bitStream.WriteString(PlayerPrefs.GetString(species.ToString()));
species = bitStream.ReadByte();
revision = bitStream.ReadInt32();
Но на выходе я получаю неверные данные. Что я делаю не так?
Ответ №1:
Основная проблема здесь заключается в том, что вы используете строки в качестве хранилища двоичных данных. Это неправильно, потому что может произойти изменение кодировки строки, что приведет к повреждению ваших данных. К сожалению, PlayerPrefs
не предоставляет никакого способа сохранения / загрузки двоичных данных. Таким образом, решением было бы использовать вместо этого текстовую сериализацию.
PS Это выглядит некорректно:
bitStream.WriteString(PlayerPrefs.GetString(species.ToString()));
Комментарии:
1. Я не совсем понимаю ваш ответ. Не могли бы вы привести пример кода? Предпочтения игрока. SetInt не подходит, в моей строке хранятся байты.
2. Какие значения могут
species
принимать? Если только несколько, тоPlayerPrefs.SetInt
подходит идеально. Если их много (или если вам нужно универсальное решение), то да, вам нужна сериализация. НоBitStream
это неправильный выбор. Я бы также сказал, что двоичная сериализация также является неправильным выбором. Я бы рекомендовал использовать какую-то текстовую сериализацию (например, XML или JSON).3. У меня много разных типов, а не один Int. Но мне нужен только битовый поток, и я не знаю, как в моем случае, правильная проблема десериализуется.
4. Почему вам «нужен только битовый поток»?
5. Одна вещь. О чем мы говорим
UnityEngine.BitStream
?