2013-01-14 89 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'... 
} 
相關問題