快速业务通道

使用Java语言进行Unicode代理编程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
the  length of str   int[] acp = new int[str.codePointCount(0,  len)];   int j = 0;            // an index  for acp   for (int i = 0, cp; i < len; i +=  Character.charCount(cp)) {     cp = str.codePointAt (i);     acp[j++] = cp;   }   return acp; }

清单 5 的处理时间降低到比 示例 1-1 长 1.68 倍。

示例 1-6:访问一个 char 数组

清单 6 在使用 示例 1-5 中展 示的优化的同时直接访问一个 char 类型数组:

清单 6. 使用一个 char 数组的优化支持

int[] toCodePointArray(String str) { //  Example 1-6   char[] ach = str.toCharArray(); // a  char array copied from str   int len = ach.length;       // the length of ach    int[] acp = new int [Character.codePointCount(ach, 0, len)];   int j = 0;             // an index for acp   for (int  i = 0, cp; i < len; i += Character.charCount(cp)) {     cp = Character.codePointAt(ach, i);     acp[j++]  = cp;   }   return acp; }

char 数组 是使用 toCharArray() 从字符串复制而来的。性能得到改善,因为对数组的直 接访问比通过一个方法的间接访问要快。处理时间比 示例 1-1 长 1.51 倍。但 是,当调用时,toCharArray() 需要一些开销来创建一个新数组并将数据复制到 数组中。String 类提供的那些方便的方法也不能被使用。但是,这个算法在处 理大量数据时有用。

示例 1-7:一个面向对象的算法

这个示例的 面向对象算法使用 CharBuffer 类,如清单 7 所示:

清单 7. 使用 CharSequence 的面向对象算法

int[] toCodePointArray(String  str) {    // Example 1-7   CharBuffer cBuf =  CharBuffer.wrap(str); // Buffer to wrap str   IntBuffer  iBuf = IntBuffer.allocate(  // Buffer to store code points       Character.codePointCount(cBuf, 0, cBuf.capacity ()));   while (cBuf.remaining() > 0) {      int cp = Character.codePointAt(cBuf, 0); // the current code  point     iBuf.put(cp);     cBuf.position (cBuf.position() + Character.charCount(cp));   }    return iBuf.array(); }

与前面的示例不同,清单 7 不 需要一个索引来持有当前位置以便进行顺序访问。相反,CharBuffer 在内部跟 踪当前位置。Character 类提供静态方法 codePointCount() 和 codePointAt() ,它们能通过 CharSequence 接口处理 CharBuffer。CharBuffer 总是将当前位 置设置为 CharSequence 的头。因此,当 codePointAt() 被调用时,第二个参 数总是设置为 0。处理时间比 示例 1-1 长 2.15 倍。

使用Java语言进行Unicode代理编程(4)

时间:2010-11-20 IBM Masahiko Maedera

处理时间比较

这些顺序访问示例的计时测试使用了一个包含 10,000 个代理对和 10,000 个非代理对的样例字符串。码位数组从这个字符串创建 10,000 次。测 试环境包括:

OS:Microsoft Windows® XP Professional SP2

Java:IBM Java 1.5 SR7

CPU:Intel® Core 2 Duo CPU T8300 @ 2.40GHz

Memory:2.97GB RAM

表 1 展示了示例 1-1 到 1-7 的绝 对和相对处理时间以及关联的 API:

表 1. 顺序访问示例的处理时间和 API

示例 说明 处理 时间 (毫秒) 与 示例 1-1 的比率 API
1-1 不支持代理对 2031 1.00  
1-2 有限支持 2797 1.38 Character 类: static boolean isHighSurrogate(char ch) static boolean isLowSurrogate(char ch) static boolean isSurrogatePair(char high, char low) static int toCodePoint(char high, char low)
1-3 基本支持 5687 2.80 String 类: int codePointAt(int index) int codePointCount(int begin, int end) int offsetByCodePoints(int index, int cpOffset)
1-4 使用 codePointBefore() 的基本支持 5516 2.72 String 类: int codePointBefore(int index)
1-5 使 用 charCount() 的优化支持 3406 1.68 Character 类: static int charCount(int cp)
1-6 使用 一个 char 数组的优化支持 3062 1.51 Character 类: static int codePointAt(char[] ach, int index) static int codePointCount(char[] ach, int offset, int count)
1-7 使用 CharSequence 的面向对象方法 4360 2.15 Character 类: static int codePointAt(CharSequence seq, int index) static int codePointCount(CharSequence seq, int begin, int end)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号