InputStream.read() 메서드를 구현하는 메서드에서 반환된 byte 타입의 표현식을 보고합니다.

byte 타입은 -128에서 127까지의 값을 포함하지만 InputStream.read()0에서 255 내의 값을 반환하기 때문에 이러한 식은 의심스럽습니다. 빠른 수정이 비트마스크 0xFF를 적용하여 표현식을 부호가 없는 byte로 변환합니다.

예:


class MyInputStream extends InputStream {
  int pos = 0;
  byte[] data;

  MyInputStream(byte[] input) {
    data = input;
  }

  @Override
  public int read() {
    if (pos == data.length) {
      return -1;
    }
    return data[pos++]; // 문제 발생
  }
}

빠른 수정 적용 후:


class MyInputStream extends InputStream {
  int pos = 0;
  byte[] data;

  MyInputStream(byte[] input) {
    data = input;
  }

  @Override
  public int read() {
    if (pos == data.length) {
      return -1;
    }
    return data[pos++] & 0xFF;
  }
}

2023.2의 새로운 기능