C#对UTF-16字节数组执行字符串操作
|
我正在将文件读入“ 0”。该文件包含许多采用以下格式的UTF-16字符串(百万):
第一个字节包含和字符串长度(以字符为单位)(范围0 .. 255)
以下字节包含采用UTF-16编码的字符串字符(每个char用2个字节表示,表示byteCount = charCount * 2)。
我需要对文件中的所有字符串执行标准字符串操作,例如:
IndexOf
,EndsWith
和StartsWith
,以及with4ѭ和StringComparison.Ordinal
。
现在,我的代码首先将每个字符串从字节数组转换为System.String
类型。我发现以下代码是最有效的方法:
// position/length validation removed to minimize the code
string result;
byte charLength = _buffer[_bufferI++];
int byteLength = charLength * 2;
fixed (byte* pBuffer = &_buffer[_bufferI])
{
result = new string((char*)pBuffer, 0, charLength);
}
_bufferI += byteLength;
return result;
new string(char*, int, int)
仍然很慢,因为它会对每个字符串执行不必要的复制。
Profiler说它的“ѭ9”表现慢。
我需要一种方法来执行字符串操作,而不必为每个字符串复制字节。
有没有一种方法可以直接在字节数组上执行字符串操作?
有没有一种方法可以在不复制字节的情况下创建新字符串?
没有找到相关结果
已邀请:
3 个回复
慰泥悍瓶
。 如果使用指针,则可以尝试一次获取多个字符串,这样就不必为每个字符串固定缓冲区。
辅奈
末钉蹈泰唬