我有一个长整型变量,需要保存到字节缓冲区中。由于在Java中,所有int值都适合4个字节,而所有long值都存储在8个字节中,我可以使用一个简单的功能来将整数保存在4个字节中。因此,我想到了这个解决方案:
public class TestApp {
static byte [] buffer = new byte[8];
static public void writeInt(int startIndex, int number) {
buffer[startIndex] = (byte) (number >> 24);
buffer[startIndex + 1] = (byte) (number >> 16 & 0x000000FF);
buffer[startIndex + 2] = (byte) (number >> 8 & 0x000000FF);
buffer[startIndex + 3] = (byte) (number & 0x000000FF);
}
static public int readInt(int startIndex) {
return
(buffer[startIndex] & 0xFF) << 24 |
(buffer[startIndex+1] & 0xFF) << 16 |
(buffer[startIndex+2] & 0xFF) << 8 |
(buffer[startIndex+3] & 0xFF);
}
static public void writeLong(int startIndex, long number) {
writeInt(startIndex, (int)(number >> 32));
writeInt(startIndex + 4, (int)number);
}
static public long readLong(int startIndex) {
long a1 = readInt(startIndex);
long a2 = readInt(startIndex+4);
long b= a1 << 32;
b |= a2;
return b;
}
public static void main(String []args) {
long r = 817859255185602L;
writeLong(0, r);
long test = readLong(0);
System.out.println(Long.toString(r));
System.out.println(Long.toString(test));
}
}
看到readLong()
实际上没有完成它应该完成的任务,这让人惊讶。当我编写readLong()
和writeLong()
时,我的想法是将一个整数值左移32位,并将结果与下一个整数进行或运算;结果将变为所需的长整型值。但是这个示例证明了我是错的。两个整数进行或运算有什么问题吗?