[英]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()
继续读取所需的无符号字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.