下面的代码是从汉字库中查找对应的汉字字形码:

 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方法要慎重啊。这是我一夜得来的教训。