我需要从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();
答案 0 :(得分:0)
Java使用整数的机器独立表示形式作为字节序列,如果您使用DataOutputStream编写该整数,然后尝试在另一台机器(即使字节序不同)上使用DataInputStream读取该整数,则无论如何它将正确地读取它。 Java正是为此而设计的:即与机器无关。
当然,您不能假定字节序在C语言中生成的文件中是相同的。
碰巧,Java默认为big-endian(请参见DataOutput规范)。 如果您在任何大端计算机上进行测试都能正常运行,而在小端计算机(例如x86)上测试将会失败。
您可以尝试使用LittleEndianDataOutputStream来解决此问题。