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