Ok поэтому у меня есть файл, который содержит ровно 8 байт:Чтение сырых байт из файла Java (обратный порядок байт выпуск)
hexdump /tmp/temp_session_TGAyUSfICJgY.txt
0000000 b21b 113c bf3a 4a92
0000008
Когда я кот файл я вижу gobbly Гук, который является нормальным и ожидаемым (возможно, увидеть реальные символы в зависимости от вашего кодирования)
cat /tmp/temp_session_TGAyUSfICJgY.txt
�<:��J
Теперь в Java, когда я пытаюсь прочитать байты, они выходят назад. Мой код выглядит следующим образом:
InputStream input = new FileInputStream(session_file_param);
int a = 0;
int i=0;
while(a != -1) {
a = input.read();
System.out.println(a);
if(a != -1) {
pw[i] = (byte)a;
}
i++;
}
System.out.println("String representation of session pw is " + pw.toString());
Мой выход (добавлен = HEX для удобства чтения):
27 = 1b
178 = b2
60 = 3c
17 = 11
58 = 3a
191 = bf
146 =92
74 = 4a
-1
String representation of pw is [[email protected]
Если я читаю файл RAW, побайтно, не байты приходят в порядке? В основном каждый два байтовых блока переворачиваются.
EDIT:
Вы правы, извините за тревоги. Я сделал следующее испытание:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp = fopen("/tmp/temp_session_TGAyUSfICJgY.txt", "r");
char byte;
while (!feof(fp)) {
fread(&byte,1,1, fp);
printf("%x\n", byte);
}
}
и выход:
1b
ffffffb2
3c
11
3a
ffffffbf
ffffff92
4a
Я считаю, что ваша проблема на самом деле шестнадцатеричного (хотя и не может быть уверен, не зная, какая версия/платформу, которую вы используете). Дисплей по умолчанию, как правило, 16 бит (два байта), объединенный, что будет иметь смысл, учитывая результат, который вы видите. Попробуйте запустить hexdump в однобайтовом режиме (например, с -b), и я ожидаю, что вы увидите выходные байты в ожидаемом порядке (или, по крайней мере, в том порядке, в котором их читает Java). – user1676075