private static boolean decodeIpv4Suffix(String input,int pos,int limit,byte[] address,int addressOffset){
  int b=addressOffset;
  for (int i=pos; i < limit; ) {
    if (b == address.length)     return false;
    if (b != addressOffset) {
      if (input.charAt(i) != '.')       return false;
      i++;
    }
    int value=0;
    int groupOffset=i;
    for (; i < limit; i++) {
      char c=input.charAt(i);
      if (c < '0' || c > '9')       break;
      if (value == 0 && groupOffset != i)       return false;
      value=(value * 10) + c - '0';
      if (value > 255)       return false;
    }
    int groupLength=i - groupOffset;
    if (groupLength == 0)     return false;
    address[b++]=(byte)value;
  }
  if (b != addressOffset + 4)   return false;
  return true;
}

private static boolean decodeIpv4Suffix ( String input , int pos , int limit , byte [ ] address , int addressOffset ) { int b = addressOffset ; for ( int i = pos ; i < limit ; ) { if ( b == address . length ) return false ; if ( b != addressOffset ) { if ( input . charAt ( i ) != '.' ) return false ; i ++ ; } int value = 0 ; int groupOffset = i ; for ( ; i < limit ; i ++ ) { char c = input . charAt ( i ) ; if ( c < '0' || c > '9' ) break ; if ( value == 0 && groupOffset != i ) return false ; value = ( value * 10 ) + c - '0' ; if ( value > 255 ) return false ; } int groupLength = i - groupOffset ; if ( groupLength == 0 ) return false ; address [ b ++ ] = ( byte ) value ; } if ( b != addressOffset + 4 ) return false ; return true ; }
decodes an ipv4 address suffix of an ipv6 address , like 1111 : : 5555 : 6666 : 192 . 168 . 0 . 1 .
