【问题标题】:Serializing a memorystream object to string将内存流对象序列化为字符串
【发布时间】:2011-09-03 22:10:18
【问题描述】:

现在我正在使用 XmlTextWriter 将 MemoryStream 对象转换为字符串。但我不知道是否有更快的方法将内存流序列化为字符串。

我按照此处给出的代码进行序列化 - http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp

已编辑

流到字符串

ms.Position = 0;
using (StreamReader sr = new StreamReader(ms))
{
    string content = sr.ReadToEnd();
    SaveInDB(ms);
}

串流

string content = GetFromContentDB();
byte[] byteArray = Encoding.ASCII.GetBytes(content);
MemoryStream ms = new MemoryStream(byteArray); 
byte[] outBuf = ms.GetBuffer(); //error here

【问题讨论】:

标签: c# xml-serialization memorystream


【解决方案1】:
using(MemoryStream stream = new MemoryStream()) {
   stream.Position = 0;
   var sr = new StreamReader(stream);
   string myStr = sr.ReadToEnd();
}

当你使用 MemoryStream(byte[]) 构造函数时,你不能使用 GetBuffer。

MSDN 引用:

这个构造函数不暴露 底层流。 GetBuffer 抛出 未授权访问异常。

您必须使用此constructor 并设置publiclyVisible = true 才能使用GetBuffer

【讨论】:

  • 恐怕这不是写字符串。在我尝试将字符串转换回内存流后,它会抛出错误消息“无法访问 MemoryStream 的内部缓冲区”。在做 memorystream.GetBuffer() 时。
  • 已更新帖子中的代码。原始内存流大约为 95000 字节。但在我将字符串转换回流后,我只得到 1900 个字节。
  • 可能是个愚蠢的问题,但是你确定数据库字段足够大吗?如果将其存储在内存而不是数据库中,转换是否有效?
  • @Matthew 我也有同样的疑问。我现在正在对此进行调查,因为我使用的库不会向我公开数据库的架构。
  • 糟糕。存储/检索字符串是问题所在。由于列的最大容量较小,我无法从数据库中检索完整的字符串。只是在保存之前和检索之后快速检查了字符串长度。会解决的。
【解决方案2】:

在 VB.net 中我使用了这个

Dim TempText = System.Text.Encoding.UTF8.GetString(TempMemoryStream.ToArray())

在 C# 中可能适用

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2010-09-13
    相关资源
    最近更新 更多