public int readSI32() throws IOException {
  synchBits();
  int b0=in.read();
  if (b0 < 0) {
    throw new IOException("Unexpected end of input");
  }
  int b1=in.read();
  if (b1 < 0) {
    throw new IOException("Unexpected end of input");
  }
  int b2=in.read();
  if (b2 < 0) {
    throw new IOException("Unexpected end of input");
  }
  byte[] aByte=new byte[1];
  int count=in.read(aByte);
  if (count < 1) {
    throw new IOException("Unexpected end of input");
  }
  bytesRead+=4;
  return (int)((aByte[0] * 256 * 256* 256) + (b2 * 256 * 256) + (b1 * 256)+ b0);
}

public int readSI32 ( ) throws IOException { synchBits ( ) ; int b0 = in . read ( ) ; if ( b0 < 0 ) { throw new IOException ( "Unexpected end of input" ) ; } int b1 = in . read ( ) ; if ( b1 < 0 ) { throw new IOException ( "Unexpected end of input" ) ; } int b2 = in . read ( ) ; if ( b2 < 0 ) { throw new IOException ( "Unexpected end of input" ) ; } byte [ ] aByte = new byte [ 1 ] ; int count = in . read ( aByte ) ; if ( count < 1 ) { throw new IOException ( "Unexpected end of input" ) ; } bytesRead += 4 ; return ( int ) ( ( aByte [ 0 ] * 256 * 256 * 256 ) + ( b2 * 256 * 256 ) + ( b1 * 256 ) + b0 ) ; }
read a 32 bit signed number
