В нашей игре, чтобы сохранить «Призрак» (сериализуемая класс, который является запись о том, как кто-то играл уровень), мы используем простойотливать поток или массив байтов объекта
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(filePath, FileMode.Open);
object ghost = bf.Deserialize(file);
file.Close();
return (Ghost)ghost;
Который работает отлично, и для экономии призраков,
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(filePath);
bf.Serialize(file, ghost);
file.Close();
Опять же, отлично.
Вещь, мы также загружаем вещи из Интернета (в частности, Amazon S3), которая в итоге дает общий поток.
То, что я хочу сделать, это сохранить этот поток в файл,
using(BinaryReader reader = new BinaryReader(stream))
{
FileStream file = File.Create(downloadPath);
byte[] array = ReadAllBytes(reader);
file.Write(array, 0, array.Length);
file.Close();
}
Но и доставить эти байты обратно запрашивающей код, чтобы иметь возможность бросить их в объект Духа. В настоящее время мы сохраняем призрак, говорим, что запрашивающий код он был сохранен, и они просто читают его снова, что работает, но я был бы на 99% уверен, что это лишний шаг, когда у нас уже есть байты, доступные нам.
Немного C# noob, и каждый пример, который я видел о десериализации, включает File
объектов. Разумеется, любые указатели были бы весьма благодарны.
Если у вас уже есть сериализованный массив байтов, тогда просто создайте MemoryStream и используйте BinaryFormatter для десериализации оттуда. – RogerN
Мне на самом деле не нужно. «Поток», который уже существует, уже совместим, и BinaryFormatter может принять это, как @CCondron ответил ниже. – seaders