[英]Reading specific bytes from RandomAccessFile and testing to see if they equal 0
[英]Reading unsigned bytes with RandomAccessFile
我有一个使用RandomAccessFile描述符的方法:
public byte[] readByte(int number) {
try {
byte[] buffer = new byte[number];
raf.read(buffer);
return buffer;
} catch (IOException e) {
throw new ReadException("readBytes failed", e);
}
}
我试图用来读取存储一系列无符号字节的二进制文件,但是却得到了负值。 还尝试了:
public byte readByte() {
try {
return (byte) raf.readUnsignedByte();
} catch (IOException e) {
throw new ReadException("readByte failed", e);
}
}
public byte[] readByte(int number) {
byte[] sArray = new byte[number];
for (int i = 0; i < number; i++) {
sArray[i] = readByte();
}
return sArray;
}
在我看来,使用readUnsignedByte()应该只返回正值,但最终到处都是负值。
甚至通过以下方式强制积极:
public byte[] readByte(int number) {
byte[] sArray = new byte[number];
for (int i = 0; i < number; i++) {
sArray[i] = (byte) (readByte() & 0xFF);
}
return sArray;
}
仍然,我得到负值。 我可以使用正值的唯一方法是在使用它们时将它们转换(我将这些数字用作另一个数组的索引):
palette[sArray[j] & 0xFF];
我究竟做错了什么?
您将readUnsignedByte
的结果强制转换为byte
,因此,如果结果为255(作为int
(例如),则在强制转换为byte
后为-1
。
byte
始终使用Java签名- 始终具有[-128, 127]
。 您对此无能为力。
我建议您坚持使用第一个代码段(尽管使用read
的返回值来检查您是否已实际阅读了期望的所有内容),并在需要时使用& 0xff
获取正值。
一种替代方法是使用short[]
,但这非常浪费-您为每1字节的实际数据使用2字节的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.