从非常大的stringbuilder获取UTF8.GetBytes

时间:2016-10-26 15:52:18

标签: c# stringbuilder

我有一个长度为1,539,121,968的StringBuilder。在int foo_int() { std::cout << "integral" << std::endl; return int(); } float foo_float() { std::cout << "non-integral" << std::endl; return float(); } int main() { foo_int(); foo_float(); } 上调用StringBuilder .ToString()时,OutOfMemoryException失败。我尝试创建一个char数组,但是不允许创建这么大的数组。

我需要以UTF8格式存储一个字节数组。有可能吗?

1 个答案:

答案 0 :(得分:2)

我建议查看流的文档。这可能会有所帮助。

接近它的另一种方法是将其拆分。至于您上次发表的评论,表示您希望将其存储为带有UTF8的ByteArray,您需要char[],否则您将失去编码。我建议将它拆分成许多较小的字符串(或char[] s)存储在可以轻松重建的单独对象中。这样的事情就足够了,创造了许多StringSlice s:

public class StringSlice()
{
     public Str {get;}
     public Index {get;}
     public StringSlice(string str, int index)
         {
              this.Str = str;
              this.Index = index;
         }

     public static List<string> ReconstructString(IEnumerable<StringSlice> parts)
         {
              //Sort input by index return list with new strings in order. Probably have to use a buffer on the disc so as not to breach 2GB obj limit.
         }
}

从本质上讲,你在这里做的事情类似于互联网数据包的分割和重建方式。我不完全确定我是否已经回答了你的问题,但希望这会有所帮助。