为什么c#utf8-json需要将obj序列化为utf8 byte [],然后再将utf8.getstring序列化?这样做有什么好处?
Utf8-json是C#中最快的JSON序列化工具之一。序列化json时,通常将对象解析为字符串或char,然后填充到StringBuilder中,该StringBuilder维护char [],最后调用ToString()方法将char []转换为String。 utf8-json维护一个字节[],该字节首先将对象解析为utf8格式的字节[],然后调用UTF8。此字节[]的GetString()方法。我不知道这种方法与其他方法之间的区别。是性能差异吗?但是通过我的验证,char []-> ToString()的字符串速度比字节[]-> UTF8.GetString()快。为什么utf8-json会这样做?
obj-> char []->字符串
obj->字节[]->字符串
我想我说错了。我的意思是为什么相同的序列化逻辑,UTF-8使用byte []存储,stringbuiler使用char []存储,而UTF-8更快。
打开。 net fx,我将JSON拼接到StringBuilder中以比较utf-8的性能。结果是UTF-8的速度是原来的两倍。通过阅读源代码,我发现我们的序列化逻辑是相同的,但是为什么UTF-8的速度是我的两倍?您知道,UTF-8也有一层byte []来消耗字符串,而stringbuilder的ToString()比UTF8快。 GetString()。
答案 0 :(得分:1)
在目前的.NET中,char
和string
是UTF-16编码的,而不是UTF-8。在这种编码中,每个char
或代码单元正好有2个字节;在UTF-8中,每个字符可能有1个或更多字节。通常,Web大多已标准化为UTF-8进行编码,因此将byte[]
原始写入流中要比先将UTF-16值转换为UTF-8然后转储为流更容易。
答案 1 :(得分:0)
您是说neuecc / Utf8Json吗?
将对象序列化为json字符串后,通常将其发送,然后需要首先将该字符串转换为byte []。
因此,如果串行器可以直接输出byte []数据,那么这是有益的。