[英]cast a stream or byte array to object
在我們的游戲中,為了保存一個“幽靈”(一個可序列化的 class,它是某人如何玩關卡的記錄),我們直接使用
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)加載內容,最后給出一個通用的 stream。
我想做的是將 stream 保存到文件中,
using( BinaryReader reader = new BinaryReader(stream) )
{
FileStream file = File.Create(downloadPath);
byte[] array = ReadAllBytes(reader);
file.Write(array, 0, array.Length);
file.Close();
}
但也將這些字節返回給請求代碼,以便能夠將它們投射到 Ghost object 中。目前,我們保存了 ghost,告訴請求代碼它已被保存,他們只是從那里再次讀取它,這是有效的,但是當我們已經有了可用的字節時,我可以 99% 確定這是一個不必要的步驟。
小白c#,我看到的每一個反序列化的例子都涉及到File
對象。 任何指針顯然將不勝感激。
內存流的語義與文件流的語義相同。 您擁有的示例應以相同的方式工作,內存流代替文件流。 您也可以使用不安全的代碼來執行此操作,但是對於您在此處嘗試執行的操作來說,這似乎有些過頭。 這樣的事情應該起作用:
var bf = new BinaryFormatter();
object ghost = bf.Deserialize(stream);
return ghost;
讀者不需要,但我不知道您得到什么樣的信息。
當然,一旦您在內存中有了幽靈對象,就可以將副本序列化到磁盤上。
請注意,根據官方 .NET 文檔,應避免使用BinaryFormatter
: BinaryFormatter 安全指南。
一些推薦的替代方案是:
XmlSerializer
和DataContractSerializer
用於將對象序列化/反序列化為 XML;BinaryReader
和BinaryWriter
;System.Text.Json
用於將對象序列化/反序列化為 memory 到 JSON 的 API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.