2016-09-20 83 views
0

我正在使用一些數據,這是一個mvc api。在這種情況下,我使用郵遞員傳遞數據。 數據格式爲原始文本。那我傳遞給API的價值以下,代表EDF(http://www.edfplus.info/)數據:無法讀取內存流c#

"rawdata":{ 

"binaryencoding":"base64","FileID":3,"ExtensionName":"edf", 

    "value":"gMnW5\/P5 \/Pz16+HZ087KyMbEwsHBwMDAwMHBwcLCw8PExMXFxsfHyMnJysvLy8zMy8vLysrKysnJycnJycrKysvLy8vMzMzMzc7Q0dLS0dHQzs3MysjHxcTCwL69u7m3trSysbCvra2sq6uqqqqqqqqqq6urrKysrK2tra.....QjY2SnKu7zNnb1Mi7sKehnJiWlJKRkZCQkJCRkZGSkpOTk5SUlJWVlpaXl5iYmZmampqam5qbm5ubm5ycnJ2dnp6fn6CgoaGioqGhoKCfnp6dnJybm5uampqamZmZmZiYmJeXlpaWlZWVlZSUlJOTk5KSkZGRkZGQkJCQkI+Pj4+Pj4+Pj..." 

給你一些code.To讓事情變得簡單,我會從httppost直接分配rawdata.value到之前創建的對象,值是一個字符串。

myObject.value=rawdata.value; 
byte[] data=Base64.Convert.FromBase64String(myObject.value);(myobject.Value); //this gives you a 15.000 positions array. 
Stream stream = new MemoryStream(data); 
//the stream gets those ReadTimeOut and WriteTimeOut exceptions,after being created 
StreamReader Sr=new StreamReader(stream); 
char[] header=new char[256]; 
sr.ReadBlock(header, 0, 256); 

當您檢查塊,它有它的所有值類似下面,用符號:

[0] = 65533 '�'

我還必須補充一點,我當我檢查流,我通過以下錯誤可以看到stream readtimeout和writetimeout屬性:System.InvalidOperationException

您知道爲什麼會發生此錯誤嗎?謝謝

+0

此代碼沒有意義,您能告訴我們數據應該是/代表什麼?我們知道你有* base64編碼的東西*,但那是什麼東西? –

+0

我添加了更多細節,謝謝 – Theman

+0

那麼base64編碼字符串的內容實際上是文本?是嗎?你爲什麼使用'.ReadBlock?那麼'.ReadLine'怎麼樣? –

回答

-1

該問題可能是創建MemoryStream後的帽子,位置指向數組的末尾。你試過這個嗎?

// this value comes from raw data, and for this example, lets suppose that it is all right. 
byte[] data=Base64.bDecodingForString(Value); 
Stream stream = new MemoryStream(data); 
//the stream gets those ReadTimeOut and WriteTimeOut exceptions,after being created 
stream.Position = 0; 
if(stream.CanRead) 
{ 
    StreamReader Sr=new StreamReader(stream); 
    char[] header=new char[256]; 
    sr.ReadBlock(header, 0, 256); 
} 
else 
{ 
    //Show error 
} 
+0

調用構造函數之後的初始位置是位置0,即使您將它作爲構造函數參數的一部分餵給它一個巨大的數組。你的回答不僅僅是一個答案。 –

+0

我會看到這個,謝謝 – Theman

+0

它沒有解決問題,它繼續給我那些奇怪的值[0] = 65533' ',謝謝你的時間 – Theman