繁体   English   中英

C#中的超高效UTF8字节编码

[英]Ultra-efficient UTF8 byte encoding in C#

我正在尝试在需要将C#字符串转换为byte []并将其发送到某个地方之前,在该库中实现最高性能。

由于UTF8中的char最多占用4个字节,因此我目前的方法是预分配一个大byte []。 当字符串到达​​编码位置时,我可以使用System.Text.Encoder用它填充字节数组。 如果字符串的char长度* 4大于我的缓冲区,我将分配一个新的(通过缓冲池进行优化),但这应该会很快变得比较少见。

这个解决方案的唯一问题是System.Text.Encoder似乎不接受字符串-仅接受char []。 从字符串中检索char []涉及另一个看似不必要的副本。 有一个带有char指针的不安全版本,但是目前禁止在我的库中使用它。

附带说明,StringWriter(也执行UTF8转换)维护内部缓冲区。 再次不合适-我需要自己的缓冲区,因为我也编码其他数据类型(例如ints)。

那么,有没有人知道Encoder不提供直接在String上运行的方法?

看一下Encoding类,它们包装了Encoder类。

听起来您应该坚持使用内置的文本编码,直到证明它们无效为止。 有一个UTF8Encoding.GetBytes(String,Int32,Int32,Byte [],Int32) ,它将带您的字符串并直接写入您预先分配的字节数组。

还有一个UTF8Encoding.GetByteCount(String) ,可以在为它分配内存之前计算字节数组的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM