Java 查找缓冲区中所有字节的总和
我正在做一些事情,我被要求用发送的每个数据计算校验和。该校验和是所有字节的4字节和中较低的2字节 假设我有以下数据:Java 查找缓冲区中所有字节的总和,java,arrays,checksum,bytebuffer,Java,Arrays,Checksum,Bytebuffer,我正在做一些事情,我被要求用发送的每个数据计算校验和。该校验和是所有字节的4字节和中较低的2字节 假设我有以下数据: Bytebuffer buffer = Bytebuffer.allocate(128); // assume i have filled buffer with some data 下面是我如何找到所有字节的总和,然后得到2个字节中较低的一个 byte array = buffer.array(); int checksum = 0; for(byte b : array)
Bytebuffer buffer = Bytebuffer.allocate(128); // assume i have filled buffer with some data
下面是我如何找到所有字节的总和,然后得到2个字节中较低的一个
byte array = buffer.array();
int checksum = 0;
for(byte b : array){
checksum += (int)b
}
checksum = (checksum & 0xff00ff) + ((checksum >> 0x08) & 0xff00ff);
short result = (short) (checksum + (checksum >> 0x10));
然而,监听这些数据的应用程序告诉我校验和是错误的。我的思维逻辑有什么问题?提前感谢不要读取缓冲区的备份
array()
。通常不应直接访问该阵列。它忽略缓冲区的限制和位置。相反,请使用get()
方法。批量获取:
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
或个人获得:
while (buffer.hasRemaining()) {
checksum += buffer.get() & 0xff;
}
请注意,如果已使用put()
调用填充了缓冲区,则需要调用
在一系列通道读取或put操作之后,调用此方法以准备一系列通道写入或相对get操作
谢谢,看起来原始缓冲区正在被修改。有没有办法不这样做?这就是
ByteBuffer
s的工作原理。它们就像带有定位标记的文件,在读写时会更新。这不是你应该避免的事情。