C# .NET 如何在不使用StringBuilder.ToString()的情况下将StringBuilder转换为字节数组

4
当使用 StringBuilder.ToString() 时,我遇到了 OutOfMemory 异常。因为我的字符串需要大量空间。所以我需要一种方法(通过流式处理)来解决这个问题。
以下是我的代码:
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;
}

有更好的方法吗?(streamer?) 请提供带有代码示例的答案。 谢谢。
1个回答

3
你可以使用StringBuilderCopyTo方法。
StringBuilder src = new StringBuilder("Hello!");

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

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

你正在使用字符数组,而不是字节数组。 - J. Volkya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接