报告从实现 InputStream.read() 方法的方法返回的 byte 类型的表达式。

这很可疑,因为 InputStream.read() 应返回范围从 0255 的值,而字节类型的表达式包含从 -128127 的值。 该快速修复会通过应用位掩码 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 最新变化