2016-09-20 2 views
0

J'utilise des données qui vont à une mvc api. Dans ce cas, je passe les données en utilisant le facteur. Le format de données est du texte brut. La valeur que je passe à l'API sont les suivantes, et représentent les données EDF (http://www.edfplus.info/):Impossible de lire le flux de mémoire C#

"rawdata":{ 

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

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

Ici, vous êtes un peu code.To garder les choses simples, je vais céder la rawdata.value du HttpPost directement à un objet qui a été créé auparavant, la valeur est une chaîne.

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); 

lorsque vous inspectez le bloc, il a toutes ses valeurs comme suit, avec le symbole:

[0] = 65533 '�'

Je dois aussi ajouter que je quand je visite Stream, je peut voir que les propriétés readtimeout et writetimeout de flux à travers l'erreur suivante: System.InvalidOperationException

Savez-vous pourquoi cette erreur peut-être se produire? merci

+0

Ce code n'a aucun sens, pouvez-vous nous dire ce que les données sont supposées représenter? Nous savons que vous avez * quelque chose * en encodage base64, mais qu'est ce que c'est? –

+0

J'ai ajouté plus de détails, merci – Theman

+0

Donc le contenu de cette chaîne codée base64 est en fait du texte? Est-ce que c'est ça? Pourquoi utilisez-vous '.ReadBlock? Que diriez-vous juste '.ReadLine'? –

Répondre

-1

Le problème peut être le chapeau après que le MemoryStream est créé, la position est pointée à la fin du tableau. Avez-vous essayé cela?

// 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

La position initiale après que le constructeur a été appelé est la position 0, même si vous lui fournissez un tableau géant dans le cadre des paramètres du constructeur. Votre réponse est un commentaire plus qu'une réponse. –

+0

Je vais le voir, merci – Theman

+0

Il n'a pas résolu le problème, il continue à me donner ces valeurs étranges [0] = 65533 ' ', merci pour votre temps – Theman