getArray(in); getArray(out);
data[INPUT_OFFSET] = getArray(in); data[OUTPUT_OFFSET]= getArray(out); data[INPUT_HELD] = 0;
    protected CoderResult decodeLoop(ByteBuffer in,CharBuffer out){        if(!in.hasRemaining()){            return CoderResult.UNDERFLOW;        }        getArray(in);        getArray(out);        try{            /* do the conversion */            ec=NativeConverter.decode(                                converterHandle,  /* Handle to ICU Converter */                                input,            /* input array of bytes */                                inEnd,            /* last index+1 to be converted */                                output,           /* input array of chars */                                outEnd,           /* input index+1 to be written */                                data,             /* contains data, inOff,outOff */                                false             /* donot flush the data */                                );                        /* return an error*/            if(ec == ErrorCode.U_BUFFER_OVERFLOW_ERROR){		        return CoderResult.OVERFLOW;		    }else if(ec==ErrorCode.U_INVALID_CHAR_FOUND){		        return CoderResult.unmappableForLength(data[INVALID_BYTES]);		    }else if(ec==ErrorCode.U_ILLEGAL_CHAR_FOUND){                return CoderResult.malformedForLength(data[INVALID_BYTES]);            }            /* decoding action succeded */            return CoderResult.UNDERFLOW;        }finally{            setPosition(in);            setPosition(out);        }	}