有三個(gè)對(duì)象,依次用二進(jìn)制方式序列化到文件中,然后依次取出來。應(yīng)該怎么做,第一個(gè)對(duì)象取出來成功了,但是取第二個(gè)對(duì)象的時(shí)候出現(xiàn)了錯(cuò)誤:在分析完成之前遇到了流結(jié)尾
namespace ConsoleApplication5{ class Program { static void Main(string[] args) { Serialize(); Deserialize(); } static void Serialize() { A a = new A(); FileStream fs = new FileStream("DataFile.dat", FileMode.Open); BinaryWriter bw = new BinaryWriter(fs); MemoryStream ms = new MemoryStream(); // Construct a BinaryFormatter and use it to serialize the data to the stream. BinaryFormatter formatter = new BinaryFormatter(); try {
formatter.Serialize(ms, a); byte[] tem = new byte[(int)ms.Length]; ms.Seek(0, SeekOrigin.Begin); ms.Read(tem, 0, (int)ms.Length); bw.Write(tem);
ms.Close(); ms = new System.IO.MemoryStream(); string p = "123"; formatter.Serialize(ms, p); byte[] tem1 = new byte[(int)ms.Length]; ms.Seek(0, SeekOrigin.Begin); ms.Read(tem1, 0, (int)ms.Length); bw.Seek(0, SeekOrigin.End); bw.Write(tem1); bw.Flush(); bw.Close(); } catch (SerializationException e) { Console.WriteLine("Failed to serialize. Reason: " + e.Message); throw; } finally { //fs.Close(); } } static void Deserialize() { FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter(); MemoryStream ms = new System.IO.MemoryStream(); byte[] a = new byte[145]; fs.Read(a, 0, 145); ms.Write(a, 0, 145);
object x = formatter.Deserialize(ms); Console.WriteLine(x.GetType());
byte[] b = new byte[27]; fs.Seek(145, SeekOrigin.Begin); fs.Read(b,0,27); ms.Write(b, 0, 27); x = formatter.Deserialize(ms); Console.WriteLine(x.GetType()); fs.Close();
} } [Serializable] class A { string x = "122"; }}
11 回答

函數(shù)式編程
TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
最簡(jiǎn)單的方式,把三個(gè)對(duì)象組合成一個(gè)大對(duì)象:
public class Big {public A a;public B b;public C c;}

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
這快設(shè)計(jì)到東西很多,很難幾行或者幾十行搞定。可以去用下NDatabase,或者看下那個(gè)的代碼。主要就是解決這個(gè)問題的。

拉莫斯之舞
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
@大芝麻: 如果只是簡(jiǎn)單的存儲(chǔ) ?然后拿出來,并且就是幾個(gè)幾十個(gè)對(duì)象直接序列化反序列化,直接用json存儲(chǔ)吧。

慕妹3146593
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
@imfunny:Json存儲(chǔ)確實(shí)可行不過,存儲(chǔ)的數(shù)據(jù)有能夠直觀的看出來內(nèi)部信息。謝了

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
@大芝麻: 那問題可能出在讀取流的操作時(shí),在反序列化第2個(gè)對(duì)象時(shí),流的讀取指針已經(jīng)跑到了流的結(jié)尾

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
@dudu:?
推薦閱讀一個(gè)系列博文(重點(diǎn)是第5篇):
C# 溫故而知新:Stream篇(—)
C# 溫故而知新:Stream篇(二)
C# 溫故而知新:Stream篇(三)
C# 溫故而知新:Stream篇 (四)
C# 溫故而知新:Stream篇(五)
C# 溫故而知新:Stream篇(六)

炎炎設(shè)計(jì)
TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
做一個(gè)結(jié)構(gòu)體,然后把結(jié)構(gòu)體按序追加到文件中,C++存儲(chǔ)數(shù)據(jù)的模式都這樣,可以去看看大智慧的數(shù)據(jù)存儲(chǔ)方式。
- 11 回答
- 0 關(guān)注
- 1073 瀏覽
添加回答
舉報(bào)
0/150
提交
取消