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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему при генерации RSA ключа длиной 512 бит в C# и в Java разная длина в байтах публичного ключа?
Я получаю путь к файлу, сохраняю в переменную(Путь корректный, я проверял)