Контекст задается Javadoc, в котором говорится:
«Читает следующий байт данных из входного потока байт Значение возвращается как Int в диапазоне от 0 до 255. Если. байт недоступен, потому что конец потока достигнут, возвращается значение -1. "
Под капотом, read
метод либо имеет байт, чтобы вернуть или поток находится в положении EOF. Поэтому возвращаемое значение может иметь 257 возможных состояний и (очевидно), которые не будут вписываться в byte
. API справляется с этим, возвращая int
, закодированный, как указано в выдержке javadoc, приведенной выше.
Я не смотрел на код, но я ожидаю, что это что-то смутно, как это:
if (eof) {
return -1;
} else {
// Casting to an int sign extends to 32 bits,
// and we then take the bottom 8 bits.
return ((int) someByte) & 0xff;
}
И когда вы получите результат, который вы должны сделать что-то вроде этого:
int res = is.read();
if (res == -1) {
// handle EOF case ...
} else {
byte b = (byte) res;
// handle the byte ...
}
Помогите мне создать схему распределения памяти.
Проблемы с распределением памяти отсутствуют. Типы byte
и int
являются примитивными типами.
технически «байт» не имеет знака, тогда как «байт» Java подписан. Таким образом, хотя это «байт», как в 8-битах, он не является байтом, как в примитивном типе Java. –