InputStream inputStream = new ByteArrayInputStream(new byte[]{-128, -1, 1, 127});
while (inputStream.available() > 0){
int i = inputStream.read();
System.out.println(i);
}
Вывод:
128
255
1
127
Почему пропадает минус? Как его вернуть? Может ли read() прочитать -1 и продолжить чтение дальше?
Метод read читает byte из потока и возвращает его как int в диапазоне от 0 до 255, а -1 сигнализирует о достижении конца потока:
Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned.
А тип byte является 8-битным знаковым целым числом с диапазоном допустимых значений от -128 до 127 (включительно):
The byte data type is an 8-bit signed two's complement integer. It has a minimum value of -128 and a maximum value of 127 (inclusive).
Для двоичного представления отрицательных чисел используется дополнительный код.
Таким образом, -128 выводится как 128, а -1 как 255 и необходимо приведение int к byte:
byte b = (byte) inputStream.read();
или
System.out.println((byte) i);
Продвижение своими сайтами как стратегия роста и независимости