首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ByteArray划分为队列的等号ByteArray

将ByteArray划分为队列的等号ByteArray
EN

Stack Overflow用户
提问于 2020-10-20 12:59:19
回答 2查看 225关注 0票数 2

因此,我有一个来自服务器的ByteArray of 动态大小,我需要将它划分为15大小相等的,并将它添加到我的Queue<ByteArray>中。那我该怎么做?

实际上,我需要这个作为我的BLE设备。我正在进行固件更新,我需要将字节数组转换成队列中每个字节相同的20个字节,这样才能顺利进行吗?

例如,从服务器接收的字节数组是256。我想要我的

代码语言:javascript
复制
queue[0]=bytes[0-15] onpeek() 
queue[1]=bytes[16-30] onPeek()
queue[2]=bytes[31-45]onPeek()
 ...
....
queue[n]= bytes[240-255] onPeek()

我的代码:

代码语言:javascript
复制
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
    }
EN

回答 2

Stack Overflow用户

发布于 2020-10-20 13:14:24

您可以尝试这样的方法(草稿,而不是检查)

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2020-10-20 14:28:03

我不确定是否理解你的问题,但这能给出一个方向

代码语言:javascript
复制
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将允许您根据所需的大小对其进行块块,然后只需迭代它的结果并将其添加到队列中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64445694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档