2014-02-24 274 views
0

我嘗試將一些數據寫入MemoryStream,然後正確地讀取它。例如:將數據寫入和讀取到MemoryStream

int someValue = 10; 
Console.WriteLine(someValue); 
Console.ReadKey(); 
MemoryStream lMemoryStream = new MemoryStream(); 

StreamWriter lStreamWriter = new StreamWriter(lMemoryStream); 
lStreamWriter.Write(someValue); 

StreamReader lStreamReader = new StreamReader(lMemoryStream); 
int someValue2 = lStreamReader.Read(); 
Console.WriteLine(someValue2); 
Console.ReadKey(); 

但作爲響應,我得到空的memoryStream,並獲得值-1。怎麼了?

+1

查看關於[MemoryStream.Seek](http://msdn.microsoft.com/ru-ru/library/system.io.memorystream.seek(v = vs.110).aspx)方法 – Grundy

回答

2

當你寫入流時,你提前你的位置(在所述流中)。要讀取剛寫入的值,必須「倒回」自己的位置(通過設置它)。

+0

MemoryStream爲空。 ..我什麼都不寫...... – Imorian

+1

通過位置屬性或調用Seek()。 –

+1

@Imorian你用'lStreamWriter.Write(someValue)'寫入MemoryStream' – CodingIntrigue

3

您忘記將數據刷新到數據流中。如果您想從頭開始讀取數據,您還必須將位置設置爲0。

lStreamWriter.Flush(); // after .Write! 
lMemoryStream.Position = 0; // before read! 

提示:不要關閉寫入器,它也會關閉MemoryStream。完成數據後關閉它。

+0

或者讀取: Encoding.SOMETHING.GetString(yourstream.GetBuffer(),0,yourstream.Length); //讀取整個緩衝區並將其作爲字符串以指定的編碼返回 –

+0

我採用錯誤的數據...'int someValue = 10; MemoryStream lMemoryStream = new MemoryStream(); StreamWriter lStreamWriter = new StreamWriter(lMemoryStream); lStreamWriter.Write(someValue); lStreamWriter.Flush(); lMemoryStream.Position = 0; StreamReader lStreamReader = new StreamReader(lMemoryStream); int someValue2 = lStreamReader.Read(); '我得到錯誤的值49 – Imorian

+0

@Imorian Nope,這是正確的價值。您將值寫入字符串「10」,並且該字符串的第一個字節是'(byte)'1'== 49'。如果你想返回''10'',你可以做例如。 'lStreamReader.ReadToEnd();' – Luaan