繁体   English   中英

从文件Java读取原始字节(字节序)

[英]Reading raw bytes from file java (endian issue)

好的,所以我有一个文件,该文件恰好包含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

似乎hexdump及其默认设置以两个字节的块输出文件,并将它们反转。

尝试使用

hexdump -C /tmp/temp_session_TGAyUSfICJgY.txt

要么

xxd /tmp/temp_session_TGAyUSfICJgY.txt

查看按字节顺序显示的字节顺序。

使用hexdump的以下变体:

hexdump -C /tmp/temp_session_TGAyUSfICJgY.txt

您将以Java程序产生的顺序看到字节。

我认为,默认情况下, hexdump会做大端短裤。

您确实需要知道写入文件的内容(以及如何写入)以确定您是否正确读取了文件。 一旦知道文件的写入方式,就可以控制ByteOrder。 看到这个问题。 在Java中将ByteBuffer导出为Little Endian文件

尝试使用:

int read(byte [] b)从输入流中读取一定数量的字节,并将其存储到缓冲区数组b中。

而不是int read()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM