метод чтения, который вы используете, фактически возвращает байт внутри, который он возвращает, что означает, что на самом деле используются только 8 бит из 32 битов в вашей переменной "rd".
метод write утверждает, что он принимает в качестве аргумента int, но записывает «указанный байт в этот выходной поток файла». а это значит, что ты должен быть в порядке ... но я думаю, что ты не D:
попробуйте использовать метод read, который вместо этого принимает байтовый массив в качестве аргумента, а затем запишите этот байтовый массив в ваш выходной поток.
однако, имейте в виду, что этот другой метод чтения, тот, который принимает байтовый массив в качестве аргумента, он также возвращает int. но в отличие от метода, который вы используете в своем примере (который возвращает один из байтов из входных данных), этот другой метод чтения возвращает количество прочитанных байтов. это не обязательно количество байтов, которое может содержать ваш байтовый массив. в этом случае вы должны убедиться, что вы не записали в выходной поток больше байтов, чем было фактически прочитано из последней операции чтения.