将一种编码转换为另一种的最快方法

时间:2020-08-02 02:08:01

标签: c# .net unicode encoding utf-8

因此,我正在读取可以以任何编码方式编码的文件。但是对于这个例子,我们可以说UTF-16。我需要在BYTES中读取文件(因此使用FileStream,而不是StreamReader),并以1MB的块为单位,然后将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 :(得分:0)

是的,有一种更快的方法。您可以使用多个线程来处理您的块。为了避免破坏缓冲区的顺序,您需要将缓冲区的索引传递给每个线程,并让它们使用该线程编辑相同的集合。