2016-06-08 4249 views
2

當使用StringBuilder.ToString()時,我得到一個OutOfMemory異常。 因爲我的字符串需要很大的空間。 這就是爲什麼我需要一種方式(通過流式傳輸)來使其工作。如何將StringBuilder轉換爲Byte數組而不使用StringBuilder.ToString()

這是我的代碼:

public static byte[] StringBuilderToByteArray(StringBuilder sb) 
{ 
    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
    byte[] byteArrToReturn = new byte[sb.Length]; 
    int CHUNK_STRING_LENGTH = 30000; 
    byte[] byteArr; 
    int j=0; 
    while (sb.Length > CHUNK_STRING_LENGTH) 
    { 
     byteArr = encoding.GetBytes(sb.ToString(0, CHUNK_STRING_LENGTH)); 
     sb.Remove(0, CHUNK_STRING_LENGTH); 
     for(int i=0; i< CHUNK_STRING_LENGTH; i++, j++){ 
      byteArrToReturn[j] = byteArr[i]; 
     } 
    } 
    byteArr = encoding.GetBytes(sb.ToString()); 
    for (int i = 0; i < sb.Length; i++, j++) 
    { 
     byteArrToReturn[j] = byteArr[i]; 
    } 
    return byteArrToReturn; 
} 

有沒有更好的辦法做到這一點? (流光?) 請給出答案的代碼示例。

謝謝。

回答

2

您可以使用StringBuilder

StringBuilder src = new StringBuilder("Hello!"); 

char[] dest = new char[src.Length]; 
src.CopyTo(0, dest, 0, src.Length); 

Console.WriteLine(dest); //prints Hello! 
CopyTo方法
相關問題