【问题标题】:Can not read memory stream c#无法读取内存流c#
【发布时间】:2016-09-20 12:38:17
【问题描述】:

我正在使用一些数据,这些数据用于 mvc api。在这种情况下,我使用邮递员传递数据。 数据格式为原始文本。我传递给 API 的值如下,代表 EDF (http://www.edfplus.info/) 数据:

  "rawdata":{

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

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

这里有一些代码。为简单起见,我将把 httppost 中的 rawdata.value 直接分配给之前创建的对象,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

您知道为什么会发生此错误吗?谢谢

【问题讨论】:

  • 这段代码没有意义,你能告诉我们数据应该是什么/代表什么吗?我们知道您有 something 采用 base64 编码,但那是什么?
  • 我添加了更多细节,谢谢
  • 那么base64编码字符串的内容实际上是文本?是这样吗?你为什么使用.ReadBlock? How about just .ReadLine`?
  • 有什么不同吗?抱歉这个问题,我是新手,会不会是错误?我只需要streamreader的前256个位置,对于这种情况。

标签: c# exception stream streamreader memorystream


【解决方案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] = 65533 '�' ,谢谢你的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多