GemFire/Geode中的国际化(二)

本文通过代码走读开源项目Geode,揭示了国际化实现的关键点,重点关注DataSerializer、HeapDataOutputStream和UriUtils中的字符串处理方法。强调了在处理可能包含非ASCII字符的display_name和description时,应正确使用write/read UTF以避免乱码问题。
摘要由CSDN通过智能技术生成

代码走读

商业产品的代码我们是看不到啦,这里我们就以开源的Geode为例,一起看看哪些区域涉及到了国际化实现。(这里笔者使用了内部研发的代码语法感知工具)首先,我们的目光投在了DataSerializer.java中的writeString和readString方法。

public staticvoid writeString(String value, DataOutput out) throws IOException {
    …
    if (value == null) {
      if (isDebugEnabled) {
        logger.trace(LogMarker.SERIALIZER,"Writing NULL_STRING");
      }
      out.writeByte(DSCODE.NULL_STRING);
 
    } else {
      // 注意这里!考虑到可能引入性能损耗
      // 程序会对单字节还是多字节char进行判断,再决定使用何种write方式
      int len = value.length();
      int utfLen = len; // added for bug 40932
      for (int i = 0; i < len; i++) {
        char c = value.charAt(i);
        if ((c <= 0x007F) && (c>= 0x0001)) {
          // nothing needed
        } else if (c > 0x07FF) {
          utfLen += 2;
        } else {
          utfLen += 1;
        }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值