首页 > 解决方案 > 将 ByteArray 分区到队列的同等 ByteArray

问题描述

所以,我有一个来自服务器的动态大小的 ByteArray,我需要将它分成15 个相等大小并将它添加到我的Queue<ByteArray>. 那么我该怎么做呢?

实际上,我的 BLE 设备需要这个。我正在进行固件更新,我需要将 bytearray 转换为队列中的每个 20 个字节,以便顺利进行?

例如从服务器收到的 bytearray 是 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
    }

标签: javaandroidarrayskotlin

解决方案


你可以试试这样的(草稿,不检查)

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);

推荐阅读