Java: InputStream read () возвращает байт больше 127? - PullRequest
3 голосов
/ 02 февраля 2010

У меня есть этот код:

InputStream is = socket.getInputStream();
int b;
while ((b = is.read()) != -1)
{
   System.out.println(b);
}

Байт, его диапазон равен -128 до +127.
Но один из напечатанных байтов - 210.

Является ли это результатом преобразования byte в int?
(Так что отрицательный byte становится положительным int)
Если да, могу ли я сделать то же самое (с OutputStream), преобразовав int в byte?

Спасибо
Мартейн

1 Ответ

9 голосов
/ 02 февраля 2010

На самом деле read возвращает целое число ..

public abstract int read() throws IOException

так что он неявно преобразуется в неподписанный байт, сохраняя его в int.

Как указано в документации:

Считывает следующий байт данных из входной поток. Значение байта возвращается как int в диапазоне от 0 до 255. Если байт недоступен, потому что конец потока был достигнут, значение -1 возвращается.

Подумайте о том, что если это байт со знаком, тогда -1 не может использоваться в качестве значения конца потока.

Для OutputStream у вас есть

public abstract void write(int b) throws IOException

и, как указано в документации, реализация займет 8 младших битов переданного целого числа.

...