2016-06-08 6 views
2

Bei Verwendung von StringBuilder.ToString(), bekomme ich eine OutOfMemory-Ausnahme. Weil meine Saite viel Platz benötigt. Deshalb brauche ich einen Weg (durch Streaming vielleicht), damit es funktioniert.C# .NET How to StringBuilder in Byte-Array ohne Verwendung von StringBuilder.ToString()

Dies ist mein Code:

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; 
} 

Gibt es einen besseren Weg, es zu tun? (Streamer?) Bitte geben Sie Antworten mit Codebeispielen.

Danke.

Antwort

2

können Sie verwenden CopyTo Methode StringBuilder

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

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

Console.WriteLine(dest); //prints Hello!