首页 > 解决方案 > 如何使用 Java RandomAccessFile 从文件中正确读取字节?

问题描述

我有一个字节为 88(十进制为 136)的二进制文件。

我正在使用 Java 的 RandomAccessFile 类和“读取”方法通过预定义的缓冲区读取此字节。我也尝试了“readUnsignedByte()”,但得到了与下面相同的问题。

RandomAccessFile randomAccessFile = new RandomAccessFile(inputFile, "r");
byte[] headerBuffer = new byte[32];
randomAccessFile.read(headerBuffer);

上面的代码给我 -120 表示 88,而不是 136。

我意识到高位或任何设置,但我仍然需要能够读取文件并获得 88 或 136。

问题是这个字节是二进制文件的偏移量,我可以在其中找到第一条记录,因此负数不起作用。

将不胜感激的建议。

谢谢,

标签: javarandomaccessfile

解决方案


您可以使用该Byte.toUnsignedInt方法以“无符号”方式将 abyte转换为a。int

jshell> byte b = (byte) 0x88;
b ==> -120
jshell> Byte.toUnsignedInt(b);
$57 ==> 136

该操作与按位运算符相同b & 0xff但不调用幻数或知识。


推荐阅读