好的,我有一个包含8个字节的文件:
hexdump /tmp/temp_session_TGAyUSfICJgY.txt
0000000 b21b 113c bf3a 4a92
0000008
当我抓住文件时,我看到gobbly-gook是正常的和预期的(你可能会看到真正的字符取决于你的编码)
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 [B@7f971afc
如果我正在逐字节地读取RAW文件,那么字节是否应按顺序排出?基本上每个双字节块都被翻转。
编辑:
你是对的,抱歉报警。我做了以下测试:
#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
答案 0 :(得分:1)
看来hexdump及其默认值是以两个字节的块输出文件,然后将它们反转。
尝试使用
hexdump -C /tmp/temp_session_TGAyUSfICJgY.txt
或
xxd /tmp/temp_session_TGAyUSfICJgY.txt
查看按文件显示的顺序显示的字节。
答案 1 :(得分:0)
使用hexdump的这个变体:
hexdump -C /tmp/temp_session_TGAyUSfICJgY.txt
您将看到与Java程序生成的顺序相同的字节。
我认为,默认情况下hexdump
执行big-endian短片。
答案 2 :(得分:0)
您确实需要知道写入文件的内容(以及如何)以确定您是否正确读取它。一旦知道文件的编写方式,就可以控制ByteOrder。看到这个问题。 Export ByteBuffer as Little Endian File in Java
答案 3 :(得分:0)
尝试使用:
int read(byte [] b) 从输入流中读取一些字节数并将它们存储到缓冲区数组b中。
而不是int read()