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 最新变化