因此,我有一个来自服务器的ByteArray of 动态大小,我需要将它划分为15大小相等的,并将它添加到我的Queue<ByteArray>中。那我该怎么做?
实际上,我需要这个作为我的BLE设备。我正在进行固件更新,我需要将字节数组转换成队列中每个字节相同的20个字节,这样才能顺利进行吗?
例如,从服务器接收的字节数组是256。我想要我的
queue[0]=bytes[0-15] onpeek()
queue[1]=bytes[16-30] onPeek()
queue[2]=bytes[31-45]onPeek()
...
....
queue[n]= bytes[240-255] onPeek()我的代码:
private val sendQueue: Queue<ByteArray> = ConcurrentLinkedQueue()
@Volatile
private var isWriting = false
fun send(
dataByte: ByteArray,
gatt: BluetoothGatt
): Int {
var data = dataByte
while (data.count() > 15) {
// todo divide into 20 equal byte array and add it to sendQueue.
}
sendQueue.add(data)
if (!isWriting) _send(gatt)
return 0 //0
}发布于 2020-10-20 13:14:24
您可以尝试这样的方法(草稿,而不是检查)
var partCount = 20;
var data = dataByte;
var len = data.getLength();
var partSize = len / partCount;
for (int i = 0; i < partCount - 1; i++) {
var newArray = Arrays.copyOfRange(bytes, i * partSize, (i + 1) * partSize);
sendQueue.add(newArray);
}
// and we added last part (may be a little bigger then other parts if "len % 20 != 0").
var newArray = Arrays.copyOfRange(bytes, partSize * (partCount - 1), len);
sendQueue.add(newArray);发布于 2020-10-20 14:28:03
我不确定是否理解你的问题,但这能给出一个方向
dataByte.asIterable().chunked(15).forEach {
// 'it' is a List<Byte>, convert it to ByteArray in order to add it to queue.
sendQueue.add(it.toByteArray())
}将dataByte引用为Iterable将允许您根据所需的大小对其进行块块,然后只需迭代它的结果并将其添加到队列中。
https://stackoverflow.com/questions/64445694
复制相似问题