2013-01-14 60 views
1

我使用下面的函数,以二进制数据转换如何将blob数据转换为字符串?

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

System.OutOfMemoryException显示为30MB数据为文本。如何解决这个问题,并使用这个或任何更好的方法转换大于100Mb的数据?

+0

你是否打算把它发送给客户端> –

+0

如果这些数据不是真正的UTF8,那么你所做的是错误的!原始数据是否真的是UTF8? –

+0

可能的重复http://stackoverflow.com/questions/1003275/byte-to-string-in-c-sharp –

回答

5

试试这个:

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'... 
} 
相关问题