位运算
private byte[] generateWriteValueByMaskCode(byte[] writeValue, byte[] fullValue, int offset, int dataSize) {
for (int i = 0; i < dataSize; i++) {
int writeIndex = (offset + i) / 8;
int bitOffset = (offset + i) % 8; // 在字节中的偏移量
if (writeIndex < writeValue.length) {
byte mask = (byte) (1 << bitOffset);//掩码
int res =(writeValue[writeIndex] >> bitOffset) & 1;
byte newValue = (byte) (res << bitOffset);
fullValue[writeIndex] = (byte) ((fullValue[writeIndex] & ~mask) | newValue);
}
}
return fullValue;
// 生成掩码
// StringBuilder fieldMaskCode = getFieldMaskCode(writeValue, offset, dataSize);
// byte[] maskCode = ByteUtils.bitToBytes(fieldMaskCode.toString());
//
// // 生成掩码的反码
// byte[] reverseMaskCode = ByteUtils.reverseBytes(maskCode);
//
// // 打包后的字节数组(写入的值),和块的掩码进行与操作
// byte[] writeValueAfter = ByteUtils.And(writeValue, maskCode);
//
// // 从反射内存中读取的字节数组, 和掩码的反码进行与操作
// byte[] fullValueAfter = ByteUtils.And(fullValue, reverseMaskCode);
//
// // 两次的结果进行或操作,得到要写入反射内存的字节数组
// assert writeValueAfter != null;
// assert fullValueAfter != null;
// return ByteUtils.Or(writeValueAfter, fullValueAfter);
}