static final void encode(byte[] src,int srcOff,int len,byte[] dst,int dstOff){
  dst[dstOff]=(byte)ENCODE_TABLE.charAt((src[srcOff] >> 2) & 0x3F);
  if (len == 3) {
    dst[dstOff + 1]=(byte)ENCODE_TABLE.charAt(((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F));
    dst[dstOff + 2]=(byte)ENCODE_TABLE.charAt(((src[srcOff + 1] << 2) & 0x3C) | ((src[srcOff + 2] >> 6) & 0x03));
    dst[dstOff + 3]=(byte)ENCODE_TABLE.charAt(src[srcOff + 2] & 0x3F);
  }
 else   if (len == 2) {
    dst[dstOff + 1]=(byte)ENCODE_TABLE.charAt(((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F));
    dst[dstOff + 2]=(byte)ENCODE_TABLE.charAt((src[srcOff + 1] << 2) & 0x3C);
  }
 else {
    dst[dstOff + 1]=(byte)ENCODE_TABLE.charAt((src[srcOff] << 4) & 0x30);
  }
}

static final void encode ( byte [ ] src , int srcOff , int len , byte [ ] dst , int dstOff ) { dst [ dstOff ] = ( byte ) ENCODE_TABLE . charAt ( ( src [ srcOff ] > > 2 ) & 0x3F ) ; if ( len == 3 ) { dst [ dstOff + 1 ] = ( byte ) ENCODE_TABLE . charAt ( ( ( src [ srcOff ] << 4 ) & 0x30 ) | ( ( src [ srcOff + 1 ] > > 4 ) & 0x0F ) ) ; dst [ dstOff + 2 ] = ( byte ) ENCODE_TABLE . charAt ( ( ( src [ srcOff + 1 ] << 2 ) & 0x3C ) | ( ( src [ srcOff + 2 ] > > 6 ) & 0x03 ) ) ; dst [ dstOff + 3 ] = ( byte ) ENCODE_TABLE . charAt ( src [ srcOff + 2 ] & 0x3F ) ; } else if ( len == 2 ) { dst [ dstOff + 1 ] = ( byte ) ENCODE_TABLE . charAt ( ( ( src [ srcOff ] << 4 ) & 0x30 ) | ( ( src [ srcOff + 1 ] > > 4 ) & 0x0F ) ) ; dst [ dstOff + 2 ] = ( byte ) ENCODE_TABLE . charAt ( ( src [ srcOff + 1 ] << 2 ) & 0x3C ) ; } else { dst [ dstOff + 1 ] = ( byte ) ENCODE_TABLE . charAt ( ( src [ srcOff ] << 4 ) & 0x30 ) ; } }
encode len bytes of data in src at offset srcoff , storing the result into dst at offset dstoff . len must be 1 , 2 , or 3 . dst must have at least len + 1 bytes of space at dstoff . src and dst should not be the same object . this method does no validation of the input values in the interest of performance .
