В Linux я могу читать содержимое файла и отображать его как шестнадцатеричное значение. Для этого я использую следующую команду:
$ hexdump inputFile
Эта команда для моего файла дает:
0000000 5747 8114
Обратите внимание, что сначала 0000000
смещено. Данные 5747 8114
. Для чтения первых двух байтов и их замены можно использовать следующий код:
BufferedInputStream is = new BufferedInputStream(
new FileInputStream(inputFile))
byte[] bytes = new byte[4];
is.read(bytes, 0, 2);
int result = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getInt(0);
System.out.println(Integer.toHexString(result)); // prints 5747
Однако это кажется слишком сложным и подверженным ошибкам. Обратите внимание, что я написал код, который читает файл в byte [], а затем заменяет байты, то есть
A, B, C, D
становится
B, A, D, C
Однако это не вариант для больших файлов. Итак, как мне получить поток содержимого файла, где каждые два байта меняются местами, как я описал выше?