为什么C#utf8-json需要将obj序列化为utf8 byte [],然后再序列化utf8.getstring?这样做有什么好处?

时间:2018-12-27 02:49:31

标签: c# json

为什么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()。

2 个答案:

答案 0 :(得分:1)

在目前的.NET中,charstring是UTF-16编码的,而不是UTF-8。在这种编码中,每个char或代码单元正好有2个字节;在UTF-8中,每个字符可能有1个或更多字节。通常,Web大多已标准化为UTF-8进行编码,因此将byte[]原始写入流中要比先将UTF-16值转换为UTF-8然后转储为流更容易。

答案 1 :(得分:0)

您是说neuecc / Utf8Json吗?

将对象序列化为json字符串后,通常将其发送,然后需要首先将该字符串转换为byte []。

因此,如果串行器可以直接输出byte []数据,那么这是有益的。