在我们的游戏中,要保存一个" 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();
再次,完美。
事情是,我们也在网上加载东西(特别是亚马逊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对象。目前,我们保存幽灵,告诉请求代码它已被保存,他们只是从那里再次阅读,这有效,但我99%肯定这是一个不必要的步骤当我们已经有可用的字节时。
略有c#noob,我见过的关于反序列化的每个例子都涉及File
个对象。任何指针显然都会受到高度赞赏。
答案 0 :(得分:2)
内存流的语义与文件流的工作方式相同。您拥有的示例应该以更换文件流的内存流的相同方式工作。 您也可以在不安全的代码中执行此操作,但这对您在此处尝试执行的操作而言似乎有些过分。 这样的事情应该有效:
var bf = new BinaryFormatter();
object ghost = bf.Deserialize(stream);
return ghost;
读者应该没有必要,但我不知道你得到什么样的流。
当然,在内存中有ghost对象后,将副本序列化为磁盘。