code: public final long readUnsignedInt() throws IOException {
          long ch1 = this.read();
          long ch2 = this.read();
          long ch3 = this.read();
          long ch4 = this.read();
          if ((ch1 | ch2 | ch3 | ch4) < 0)
              throw new EOFException();
          return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
      }
docs: Reads an unsigned 32-bit integer from this stream. This method reads 4
  bytes from the stream, starting at the current stream pointer.
  If the bytes read, in order, are <code>b1</code>,
  <code>b2</code>, <code>b3</code>, and <code>b4</code>, where
  <code>0&nbsp;&lt;=&nbsp;b1, b2, b3, b4&nbsp;&lt;=&nbsp;255</code>,
  then the result is equal to:
  <blockquote><pre>
  (b1 &lt;&lt; 24) | (b2 &lt;&lt; 16) + (b3 &lt;&lt; 8) + b4
  </pre></blockquote>
  <p>
  This method blocks until the four bytes are read, the end of the
  stream is detected, or an exception is thrown.
  
  @return     the next four bytes of this stream, interpreted as a
  <code>long</code>.
  @exception  EOFException  if this stream reaches the end before reading
  four bytes.
  @exception  IOException   if an I/O error occurs.