繁体   English   中英

如何使用 Java RandomAccessFile 从文件中正确读取字节?

[英]How to read byte correctly from file using Java RandomAccessFile?

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

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

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

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

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

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

将不胜感激的建议。

谢谢,

只需执行b & 0xFF即可将其转换为正 integer。

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

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

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

批量读取问题

您用于一次读取多个字节的方法read(byte[])实际上读取了一个带符号的字节,如readByte() 因此,您是对的,第一位代表符号,因此将由 Java 解释,可能导致负数。

使用偏移量并读取无符号

随机访问的好处是使用seek(long)跳转到文件中的位置/偏移量。 因此,如果您知道该记录指针字节的确切 position,您可以跳转到那里并使用readUnsignedByte()继续读取所需的无符号字节。

也可以看看

如何在 Java 中将文件读取为无符号字节?

暂无
暂无

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

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