Итак, мне нужно было пройти тест на собеседование, где я должен был написать мини-приложение, которое выполняло бы простое шифрование XOR, и натолкнулся на этот вопрос. Я использовал FileInputReader для извлечения каждого байта, выполнения операции XOR с ключом и вывода результата обратно в FileOutputStream. Вот что заставило меня задуматься.
FileInputStream возвращает тип int 32-битного со знаком. Получая только один байт, вы можете привести его к типу «байт». FileInputStream также возвращает -1, если достигает EOF. Но -1 == 0xff в двоичном двоичном коде дополнения, так что, если чтение байта действительно 0xff, а не EOF?
Является ли 0xff байтом, который математически никогда не будет возвращен, за исключением особых случаев (таких как EOF)? Или это ситуация, которую вам, возможно, придется учитывать в зависимости от данных, которые вы читаете?