从二进制文件读取整数

时间:2020-05-09 19:22:41

标签: java

我需要从Java中的非文本文件中读取一个整数。这是C

中的等效代码
unsigned int MagicNumber;
int fd = open("MyFile", O_RDONLY);
int rc = read(fd, &MagicNumber, 4);

Java中的等效功能是什么?

这对我不起作用(它产生的结果与C代码不同):

FileInputStream fin = new FileInputStream("MyFile");
DataInputStream din = new DataInputStream(fin);
int MagicNumber = din.readInt();

1 个答案:

答案 0 :(得分:0)

Java使用整数的机器独立表示形式作为字节序列,如果您使用DataOutputStream编写该整数,然后尝试在另一台机器(即使字节序不同)上使用DataInputStream读取该整数,则无论如何它将正确地读取它。 Java正是为此而设计的:即与机器无关。

当然,您不能假定字节序在C语言中生成的文件中是相同的。

碰巧,Java默认为big-endian(请参见DataOutput规范)。 如果您在任何大端计算机上进行测试都能正常运行,而在小端计算机(例如x86)上测试将会失败。

您可以尝试使用LittleEndianDataOutputStream来解决此问题。

相关问题