下面的代码是从汉字库中查找对应的汉字字形码:
static byte[] read(int areaCode, int postCode) {
byte[] data = null;
int area = areaCode - 0xa0;
int post = postCode - 0xa0;
int offSet = 24 * ((area - 1) * 94 + post - 1);
try {
// if (in == null)
in = (new String()).getClass().getResourceAsStream(ZK_PATH);
data = new byte[MAX_NUM_OF_DOTS * ((MAX_NUM_OF_DOTS - 1) / 8 + 1)];
in.skip(offSet);
in.read(data, 0, data.length);
closeInputStream();
// in.reset();
} catch (Exception e) {
}
return data;
}
static int[] getByteCode(String str) {
int[] byteCode = new int[2];
try {
byte[] data = str.getBytes(ENCODE);
byteCode[0] = data[0] < 0 ? 256 + data[0] : data[0];
byteCode[1] = data[1] < 0 ? 256 + data[1] : data[1];
} catch (Exception e) {
}
return byteCode;
}
其运行的结果是在KEmulator中可以正常的显示汉字,而在Sun 模拟器中则是只是显示了第一个字符。想想没有道理,debug啊!才发现,在获得了第一个汉字后,后面的汉字程序没有得到其字形码,就是read(int areaCode, int postCode) return值为空。在进入read函数内debug 才发现,原来是in.reset(),sun 模拟器没有执行。其原因我也不知道。好奇怪,以后大家在进行I/O 操作,用reset方法要慎重啊。这是我一夜得来的教训。