Performance UTF-8的快速验证研究

Performance UTF-8的快速验证研究,performance,utf-8,Performance,Utf 8,有关于最先进的UTF-8验证器/解码器的论文吗。我见过“在野外”的实现,在常见情况下(例如,所有7位ASCII输入)使用聪明的循环,每次迭代最多处理8字节。我不知道关于论文的情况,它可能有点太具体,而且对于严格的科学分析来说,主题过于狭窄,而是一个工程问题。您可以从查看不同库如何处理这一点开始。一些解决方案将使用特定于语言的技巧,而另一些则非常通用。对于Java,您可以从的代码开始,这是的一部分。我发现这比语言中内置的字符集转换器要快得多。我相信(但我不确定)后者对许多编码和编码特定数据文件使用

有关于最先进的UTF-8验证器/解码器的论文吗。我见过“在野外”的实现,在常见情况下(例如,所有7位ASCII输入)使用聪明的循环,每次迭代最多处理8字节。

我不知道关于论文的情况,它可能有点太具体,而且对于严格的科学分析来说,主题过于狭窄,而是一个工程问题。您可以从查看不同库如何处理这一点开始。一些解决方案将使用特定于语言的技巧,而另一些则非常通用。对于Java,您可以从的代码开始,这是的一部分。我发现这比语言中内置的字符集转换器要快得多。我相信(但我不确定)后者对许多编码和编码特定数据文件使用一段通用代码。相比之下,Javolution有专门为UTF-8设计的代码

还有一些用于特定任务的技术,例如,如果在解析文本时只需要计算一个UTF-8字符需要多少字节,您可以使用256个值的表,通过UTF-8编码字符的第一个字节对其进行索引,这种跳过字符或以字符计算字符串长度的方法比使用位操作和条件快得多

对于某些情况,例如,如果您可能会浪费一些内存,并且如果您现在遇到的大多数字符都来自基本的多语言平面,您可以尝试更激进的查找表,例如,首先使用上述方法计算长度(以字节为单位),如果长度为1或2字节(也可能是3字节),在表中查找已解码的字符。但是,请记住,要对该算法和您尝试的任何其他算法进行基准测试,因为它根本不需要更快(位运算相当快,并且使用大型查找表时,您会失去引用的局部性,加上偏移量计算也不是完全免费的)


无论如何,我建议你先看看Javolution代码或其他类似的库。

我不知道关于论文的情况,它可能有点太具体,太狭隘,无法进行严格的科学分析,而是一个工程问题。您可以从查看不同库如何处理这一点开始。一些解决方案将使用特定于语言的技巧,而另一些则非常通用。对于Java,您可以从的代码开始,这是的一部分。我发现这比语言中内置的字符集转换器要快得多。我相信(但我不确定)后者对许多编码和编码特定数据文件使用一段通用代码。相比之下,Javolution有专门为UTF-8设计的代码

还有一些用于特定任务的技术,例如,如果在解析文本时只需要计算一个UTF-8字符需要多少字节,您可以使用256个值的表,通过UTF-8编码字符的第一个字节对其进行索引,这种跳过字符或以字符计算字符串长度的方法比使用位操作和条件快得多

对于某些情况,例如,如果您可能会浪费一些内存,并且如果您现在遇到的大多数字符都来自基本的多语言平面,您可以尝试更激进的查找表,例如,首先使用上述方法计算长度(以字节为单位),如果长度为1或2字节(也可能是3字节),在表中查找已解码的字符。但是,请记住,要对该算法和您尝试的任何其他算法进行基准测试,因为它根本不需要更快(位运算相当快,并且使用大型查找表时,您会失去引用的局部性,加上偏移量计算也不是完全免费的)


无论如何,我建议您先看看Javolution代码或其他类似的库。

您只需要验证还是解码?该标准现在要求,一旦遇到无效字节,解码工作必须以错误的形式中止。我想知道单独的验证比仅仅解码和检查返回值的错误有什么好处。你只需要验证,还是同时解码?该标准现在要求,一旦遇到无效字节,解码工作必须以错误的形式中止。我想知道单独的验证比仅仅解码和检查返回值的错误有什么好处。