docs: public static void hexdump( PrintStream ps, byte[] src, int srcIndex, int length ) {
          if( length == 0 ) {
              return;
          }
  
          int s = length % 16;
          int r = ( s == 0 ) ? length / 16 : length / 16 + 1;
          char[] c = new char[r * (74 + NL_LENGTH)];
          char[] d = new char[16];
          int i;
          int si = 0;
          int ci = 0;
  
          do {
              toHexChars( si, c, ci, 5 );
              ci += 5;
              c[ci++] = ':';
              do {
                  if( si == length ) {
                      int n = 16 - s;
                      System.arraycopy( SPACE_CHARS, 0, c, ci, n * 3 );
                      ci += n * 3;
                      System.arraycopy( SPACE_CHARS, 0, d, s, n );
                      break;
                  }
                  c[ci++] = ' ';
                  i = src[srcIndex + si] & 0xFF;
                  toHexChars( i, c, ci, 2 );
                  ci += 2; 
                  if( i < 0 || Character.isISOControl( (char)i )) {
                      d[si % 16] = '.';
                  } else {
                      d[si % 16] = (char)i;
                  }
              } while(( ++si % 16 ) != 0 );
              c[ci++] = ' ';
              c[ci++] = ' ';
              c[ci++] = '|';
              System.arraycopy( d, 0, c, ci, 16 );
              ci += 16;
              c[ci++] = '|';
              NL.getChars( 0, NL_LENGTH, c, ci );
              ci += NL_LENGTH;
          } while( si < length );
  
          ps.println( c );
      }