WEB开发网
开发学院手机开发Android 开发 Android中汉字转拼音的内存优化处理 阅读

Android中汉字转拼音的内存优化处理

 2012-10-22 11:40:50 来源:WEB开发网   
核心提示: 当我们对中文名字排序时,往往采用是的用其拼音来排序的,Android中汉字转拼音的内存优化处理,Android中通过汉字的unicode编码来找到其对应的拼音,汉字unicode编码和其拼音是放在资源文件chinese_unicode_to__pinyin.txt中,所以使用白盒测试显示字符串占用的更少,MAT显示的

 当我们对中文名字排序时,往往采用是的用其拼音来排序的。Android中通过汉字的unicode编码来找到其对应的拼音。汉字unicode编码和其拼音是放在资源文件chinese_unicode_to__pinyin.txt中。
其结构很简单,比如:
示例1:
3007 ling

4E00 yi

4E01 ding

4E02 kao

它正好对应java.util.Properties所需要的格式。但是由于它继承于Hashtable,他使用的是哈希桶来把汉字unicode编码和其拼音对应,有很多哈希桶被创建而没实际使用,造成大量的哈希桶浪费,实际占用内存达2M多。
考虑到chinese_unicode_to__pinyin.txt本身的数据结构特点,我们在采用二维数组的索引来对应汉字unicode编码,第一维数组的下标对应汉字unicode编码的高8表,第二维数组的下标对应汉字unicode编码的低8表,第二维数组数存的字符串来对应汉字拼音的引用。如果在存一个汉字的拼音时,前面有汉字的拼音和他一样时,则使用这个该汉字的拼音的引用就可以了,而不必再创建新的字符串。
对于示例1的汉字和拼音就这样存储:
pinyinTable[0x30][0x0f]="ling"

pinyinTable[0x4E][0x00]="yi"

pinyinTable[0x4E][0x01]="ding"

pinyinTable[0x4E][0x02]="kao"

这样使用MAT查看占用内存就变为1M多,但是实际计算却主要是引用(一个引用占32位,即4个字节)占用的内存比较多,大概是6*(2~12)*4=96k
另外很多汉字的拼音都是相同,所以使用白盒测试显示字符串占用的更少。MAT显示的占用内存仍然有1M,应该是重复计算字符串引起的。

Tags:Android 汉字 拼音

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接