private final String _decodeShortUnicodeName(int len) throws IOException {
  int outPtr=0;
  char[] outBuf=_textBuffer.emptyAndGetCurrentSegment();
  int inPtr=_inputPtr;
  _inputPtr+=len;
  final int[] codes=SmileConstants.sUtf8UnitLengths;
  final byte[] inBuf=_inputBuffer;
  for (int end=inPtr + len; inPtr < end; ) {
    int i=inBuf[inPtr++] & 0xFF;
    int code=codes[i];
    if (code != 0) {
switch (code) {
case 1:
        i=((i & 0x1F) << 6) | (inBuf[inPtr++] & 0x3F);
      break;
case 2:
    i=((i & 0x0F) << 12) | ((inBuf[inPtr++] & 0x3F) << 6) | (inBuf[inPtr++] & 0x3F);
  break;
case 3:
i=((i & 0x07) << 18) | ((inBuf[inPtr++] & 0x3F) << 12) | ((inBuf[inPtr++] & 0x3F) << 6)| (inBuf[inPtr++] & 0x3F);
i-=0x10000;
outBuf[outPtr++]=(char)(0xD800 | (i >> 10));
i=0xDC00 | (i & 0x3FF);
break;
default :
_reportError("Invalid byte " + Integer.toHexString(i) + " in short Unicode text block");
}
}
outBuf[outPtr++]=(char)i;
}
return _textBuffer.setCurrentAndReturn(outPtr);
}

private final String _decodeShortUnicodeName ( int len ) throws IOException { int outPtr = 0 ; char [ ] outBuf = _textBuffer . emptyAndGetCurrentSegment ( ) ; int inPtr = _inputPtr ; _inputPtr += len ; final int [ ] codes = SmileConstants . sUtf8UnitLengths ; final byte [ ] inBuf = _inputBuffer ; for ( int end = inPtr + len ; inPtr < end ; ) { int i = inBuf [ inPtr ++ ] & 0xFF ; int code = codes [ i ] ; if ( code != 0 ) { switch ( code ) { case 1 : i = ( ( i & 0x1F ) << 6 ) | ( inBuf [ inPtr ++ ] & 0x3F ) ; break ; case 2 : i = ( ( i & 0x0F ) << 12 ) | ( ( inBuf [ inPtr ++ ] & 0x3F ) << 6 ) | ( inBuf [ inPtr ++ ] & 0x3F ) ; break ; case 3 : i = ( ( i & 0x07 ) << 18 ) | ( ( inBuf [ inPtr ++ ] & 0x3F ) << 12 ) | ( ( inBuf [ inPtr ++ ] & 0x3F ) << 6 ) | ( inBuf [ inPtr ++ ] & 0x3F ) ; i -= 0x10000 ; outBuf [ outPtr ++ ] = ( char ) ( 0xD800 | ( i > > 10 ) ) ; i = 0xDC00 | ( i & 0x3FF ) ; break ; default : _reportError ( "Invalid byte " + Integer . toHexString ( i ) + " in short Unicode text block" ) ; } } outBuf [ outPtr ++ ] = ( char ) i ; } return _textBuffer . setCurrentAndReturn ( outPtr ) ; }
helper method used to decode short unicode string , length for which actual length ( in bytes ) is known
