InputStream чтение отрицательных чисел

117
13 января 2021, 16:40
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 и продолжить чтение дальше?

Answer 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);
READ ALSO
RSA криптография между Java и C# приложениями

RSA криптография между Java и C# приложениями

Почему при генерации RSA ключа длиной 512 бит в C# и в Java разная длина в байтах публичного ключа?

131
добавление элемента в SimpleListProperty

добавление элемента в SimpleListProperty

у меня есть такая строка

140
Hibernate и уровни изоляциии транзакций

Hibernate и уровни изоляциии транзакций

Есть два тестовых метода:

131
Не могу получить доступ к файлу. Android Studio

Не могу получить доступ к файлу. Android Studio

Я получаю путь к файлу, сохраняю в переменную(Путь корректный, я проверял)

137