为什么c# utf8-json需要将obj序列化到utf8 byte[],然后再将utf8.getstring序列化?这样做有什么好处?
Utf8-json是C #中最高速度的JSON序列化工具之一。序列化json时,对象通常被解析为字符串或char,然后填充到StringBuilder中,后者维护char [],最后调用ToString ()方法将char []转换为字符串。utf8-json维护一个字节[],它首先以UTF8格式将对象解析为字节[],然后调用utf8。这个字节上的GetString ()方法[]。我不知道这和其他方法有什么区别。这是性能上的差异吗?但是通过我的验证,char [] -> ToString()变成字符串的速度比字节[] -> UTF8.GetString()要快。为什么utf8-json要这么做?
obj -> char[] ->字符串
obj -> byte[] ->字符串
我想我说错了。我的意思是为什么相同的序列化逻辑,UTF-8使用字节[]存储,字符串构建器使用char []存储,而UTF-8更快。
在……上面。net fx,我将JSON拼接到StringBuilder中,以比较与utf-8的性能。结果是UTF-8的速度是原来的两倍。通过阅读源代码,我发现我们的序列化逻辑是相同的,但是为什么UTF-8可以比我快一倍呢?您知道,UTF-8还有一层字节[]来消耗字符串,而字符串生成器的ToString ()比UTF8更快。GetString ()。
发布于 2018-12-27 02:54:49
在.NET中,char和string是UTF-16编码的,而不是UTF-8编码的.在这种编码中,每个char或代码单元只有两个字节;在UTF-8中,每个字符可能有一个或更多字节。通常,web已经在UTF-8上实现了编码的标准化,因此将byte[]原始写入流比先将UTF-16值转换为UTF-8,然后再将其转储到流中要容易。
发布于 2018-12-27 03:42:10
你是说中性/Utf8Json?
将对象序列化为json字符串后,通常会发送它,然后首先需要将该字符串转换为byte[]。
因此,如果序列化程序可以直接输出byte[]数据,则这是有利的。
https://stackoverflow.com/questions/53939234
复制相似问题