StringBuilder - 读取N个字符

时间:2014-11-01 18:13:35

标签: c# string performance substring

我正在处理巨大的字符串(文件为100MB - 文本)。文件文本存储在StringBuilder中。

由于某些原因,我需要更改此文本的编码,之前无法预料到这一点,从CURRENT-Encoding到NEW-Encoding。所以,我需要使用

Encoding.Convert(...)

功能。由于这个文件是HUGH,我想把它分成几部分。例如,每次1024个字符。将StringBuilder分解为子字符串对我来说似乎是一个问题,因为我不想使用

.ToString()

功能(表现原因)。

您如何建议我这样做,而不是将整个文本带到一个字符串?

1 个答案:

答案 0 :(得分:3)

只需使用StreamReader就可以流式传输文件(而不是一次性完全读取),并使用指定的编码将其读回的字符写回新文件:

string sourcePath = "...";
string destinationPath = "...";
Encoding sourceEncoding = Encoding.UTF16;
Encoding destinationEncoding = Encoding.UTF8;

char[] readBuffer = new char[1024];
int bytesRead;

using (var writer = new StreamWriter(destinationPath, false, destinationEncoding))
{
    using (var reader = new StreamReader(sourcePath, sourceEncoding))
    {
        while ((bytesRead = reader.Read(readBuffer, 0, readBuffer.Length)) > 0)
        {
            writer.Write(buffer, 0, bytesRead);
        }
    }
}