try { int pos = 0; while (pos < extra.length) { int sig = (extra[pos++] & 0xff) | (extra[pos++] & 0xff) << 8; int len = (extra[pos++] & 0xff) | (extra[pos++] & 0xff) << 8; if (sig == 0x5455) {  int flags = extra[pos]; if ((flags & 1) != 0) { long time = ((extra[pos+1] & 0xff) | (extra[pos+2] & 0xff) << 8 | (extra[pos+3] & 0xff) << 16 | (extra[pos+4] & 0xff) << 24); setTime(time); } } pos += len; } } catch (ArrayIndexOutOfBoundsException ex) {  return; } }
}
  public void setExtra(byte[] extra)  {    if (extra == null)       {			this.extra = null;			return;		}		if (extra.length > 0xffff)			throw new IllegalArgumentException();		this.extra = extra;    try      {			int pos = 0;	while (pos < extra.length) 	  {	    int sig = (extra[pos++] & 0xff)	      | (extra[pos++] & 0xff) << 8;	    int len = (extra[pos++] & 0xff)	      | (extra[pos++] & 0xff) << 8;	    if (sig == 0x5455) 	      {					/* extended time stamp */					int flags = extra[pos];		if ((flags & 1) != 0)		  {		    long time = ((extra[pos+1] & 0xff)			    | (extra[pos+2] & 0xff) << 8			    | (extra[pos+3] & 0xff) << 16			    | (extra[pos+4] & 0xff) << 24);						setTime(time);					}				}				pos += len;			}      }    catch (ArrayIndexOutOfBoundsException ex)      {			/* be lenient */			return;		}	}