如何将blob数据转换为字符串?

时间:2013-01-14 14:24:56

标签: c# asp.net

我正在使用以下功能将二进制数据转换为文本

 public string BinaryToText(byte[] data)
 {
  MemoryStream stream = new MemoryStream(data);
  StreamReader reader = new StreamReader(stream, encoding.UTF8);
  string text =  reader.ReadTod();
  return text;
 }

但是{30}数据显示System.OutOfMemoryException。如何解决这个问题并使用这个或更好的方法转换大于100Mb的数据?

1 个答案:

答案 0 :(得分:6)

请改为尝试:

public string BinaryToText(byte[] data)
{
    return Encoding.UTF8.GetString(data);
}

它将消耗更少的内存。如果仍然内存不足,则需要以块的形式读取它 - 但是如何使用数据将决定是否可能。你对返回的字符串做了什么?

此外,我将重申我之前的问题:输入数据是否真的 UTF8数据?

如果你可以处理作为多个字符串返回的数据,你可以这样做:

public IEnumerable<string> BinaryToStrings(byte[] data, int maxStringLength)
{
    var buffer = new char[maxStringLength];

    using (MemoryStream stream = new MemoryStream(data))
    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
    {
        while (true)
        {
            int count = reader.Read(buffer, 0, maxStringLength);

            if (count == 0)
            {
                break;
            }

            yield return new string(buffer, 0, count);
        }
    }
}

然后你可以在foreach循环中调用它,如下所示:

foreach (string chunk in BinaryToStrings(data, 1024))
{
    // Do something with 'chunk'...
}