【发布时间】:2015-02-09 18:30:07
【问题描述】:
在我们的游戏中,为了保存一个“Ghost”(一个可序列化的类,记录某人如何玩关卡),我们使用简单
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();
再次,完美。
问题是,我们也在从 Web 加载内容(特别是 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();
}
但也将这些字节传递回请求代码,以便能够将它们转换为 Ghost 对象。目前,我们保存了 ghost,告诉请求的代码它已保存,然后他们再次从那里读取它,这是可行的,但我 99% 确信当我们已经有了可用的字节时,这是一个不必要的步骤。
有点c#菜鸟,我见过的关于反序列化的每个例子都涉及File对象。任何指针显然将不胜感激。
【问题讨论】:
-
如果您已经获得了序列化的字节数组,那么只需从中创建一个 MemoryStream 并使用 BinaryFormatter 从那里反序列化。
-
我实际上不需要。已经存在的
stream已经兼容,BinaryFormatter 可以接受,正如@CCondron 在下面回答的那样。
标签: c# unity3d stream bytearray deserialization