Контекст задается 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
являются примитивными типами.