StringBuilder-读取N个字符
本文关键字:字符 读取 StringBuilder- | 更新日期: 2023-09-27 18:28:54
我正在处理巨大的字符串(100MB的文件-文本)。文件文本存储在StringBuilder中。
出于某种原因,我需要更改此文本的编码,以前不能期望这样,从当前编码改为新编码。所以,我需要使用
Encoding.Convert(...)
功能。由于这个文件很大,我想把它分解成几个部分。例如,每次1024个字符。将StringBuilder分解为子字符串对我来说似乎是个问题,因为我不想使用
.ToString()
函数(性能原因)。
你建议我如何做到这一点,而不把整个文本变成一个字符串?
只需使用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);
}
}
}