Самый быстрый способ конвертировать одну кодировку в другую - PullRequest
0 голосов
/ 02 августа 2020

Итак, я читаю файл, который можно закодировать в любой кодировке. Но для этого примера допустим UTF-16. Мне нужно прочитать файл в БАЙТАХ (таким образом, используя FileStream, а не StreamReader), И фрагментами по 1 МБ, а затем преобразовать байтовый буфер UTF-16 в байтовый буфер UTF8.

Что я Я делаю прямо сейчас:

char[] charBuffer = new char[bufferSize];
Encoding.Unicode.GetChars(utf16Buffer, 0, read, charBuffer, 0);
byte[] utf8Array = new byte[Encoding.UTF8.GetByteCount(charBuffer, 0, charsRead)];
int numBytes = Encoding.UTF8.GetBytes(charBuffer, 0, charsRead, utf8Array, 0);

//Do something with utf8Array
//This is what Encoding.Convert does in the background.

На самом деле это не так уж и медленно, но мне было интересно, есть ли более быстрый способ. Спасибо.

1 Ответ

0 голосов
/ 02 августа 2020

Да, есть способ быстрее. Вы можете использовать несколько потоков для обработки ваших фрагментов. Чтобы не нарушать порядок буферов, вам необходимо передать индекс буфера каждому потоку и заставить их редактировать ту же коллекцию, используя этот поток.

...