## Why is this an issue?

According to the Java documentation, any implementation of the `InputSteam.read()` method is supposed to read the next byte of data from the input stream. The value byte must be an `int` in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned.

But in Java, the `byte` primitive data type is an 8-bit signed two’s complement integer. It has a minimum value of -128 and a maximum value of 127. So by contract, the implementation of an `InputSteam.read()` method should never directly return a `byte` primitive data type. A conversion into an unsigned byte must be done before by applying a bitmask.

### Noncompliant code example

    @Override
    public int read() throws IOException {
      if (pos == buffer.length()) {
        return -1;
      }
      return buffer.getByte(pos++); // Noncompliant, a signed byte value is returned
    }

### Compliant solution

    @Override
    public int read() throws IOException {
      if (pos == buffer.length()) {
        return -1;
      }
      return buffer.getByte(pos++) & 0xFF; // The 0xFF bitmask is applied
    }