我有一个长度为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格式存储一个字节数组。有可能吗?
答案 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.
}
}
从本质上讲,你在这里做的事情类似于互联网数据包的分割和重建方式。我不完全确定我是否已经回答了你的问题,但希望这会有所帮助。