code: @Override
    public float readFloat() throws IOException {
      int floatAsInt = readInt();
      if ((floatAsInt >>> 31) > 0) {
        floatAsInt ^= 0x7FFFFFFF;
      }
      return Float.intBitsToFloat(floatAsInt);
    }
docs: A float was written as 4 bytes. It was encoded as a 32 bit integer. If it
  was a negative number, the complement of the 31 bits (every bit except the
  sign bit) was taken.
  
  To decode, we read the 4 byte integer. If the most significant bit is 1, we
  take the compliment of the lower 31 bits. Finally we convert this integer
  to float using Float.intBitsToFloat.
  
  @return The decoded float.