代码走读
商业产品的代码我们是看不到啦,这里我们就以开源的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;
}