使用Java语言进行Unicode代理编程 - 编程入门网
3)、(4) 和 (6) 中,char 类型的 索引通过 offsetByCodePoints() 用码位索引替代。
基本的算法流与 示 例 2-1 中的看起来几乎一样。但处理时间根据字符串长度与示例 2-1 的比率同 比增加,因为 offsetByCodePoints() 总是从字符串头到指定索引计算字符串内 部。 示例 2-3:减少的处理时间 可以使用清单 10 中展示的方法 来避免 示例 2-2 的性能问题: 清单 10. 改进的性能
首先,在 Line (2) 中,(清单 9 中的 )表达式 len-width 被 offsetByCodePoints(len,-width) 替代。但是,当 width 的值大于码位的数量时,这会抛出一个 IndexOutOfBoundsException 实 例。必须考虑边界条件以避免异常,使用一个带有 try/catch 异常处理程序的 子句将是另一个解决方案。如果表达式 len>width*2 为 true,则可以安全 地调用 offsetByCodePoints(),因为即使所有码位都被转换为代理对,码位的 数量仍会超过 width 的值。或者,如果 codePointCount(0,len)>width 为 true,也可以安全地调用 offsetByCodePoints()。如果是其他情况, sliceLimit 必须设置为 0。 在 Line (4) 中,清单 9 中的表达式 pos + width 必须在 while 循环中使用 offsetByCodePoints(pos,width) 替换。需 要计算的量位于 width 的值中,因为第一个参数指定当 width 的值。接下来, 在 Line (5) 中,表达式 pos+=width 必须使用表达式 pos=end 替换。这避免 两次调用 offsetByCodePoints() 来计算相同的索引。源代码可以被进一步修改 以最小化处理时间。 处理时间比较 图 1 和图 2 展示了示例 2-1 、2-2 和 2-3 的处理时间。样例字符串包含相同数量的代理对和非代理对。当 字符串的长度和 width 的值被更改时,样例字符串被切割 10,000 次。 图 1. 一个分段的常量宽度 图 2. 分段的常量计数 使用Java语言进行Unicode代理编程(7)时间:2010-11-20 IBM Masahiko Maedera示例 2-1 和 2-3 按照长度比例增加了它们的处理时间,但 示例 2-2 按照长度的平方比例增加了处理时间。当字符串长度和 width 的值增加而分段 的数量固定时,示例 2-1 拥有一个常量处理时间,而示例 2-2 和 2-3 以 width 的值为比例增加了它们的处理时间。 信息 API 大多数处理 代理的信息 API 拥有两种名称相同的方法。一种接收 16 位 char 类型参数, 另一种接收 32 为码位参数。表 2 展示了每个 API 的返回值。第三列针对 U+53F1,第 4 列针对 U+20B9F,最 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |