java - 将 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
}
解决方案
你可以试试这样的(草稿,不检查)
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);
推荐阅读
- flutter - Flutter TextStyle(不是TextTheme)apply()和copyWith()之间的区别
- reactjs - 如何清除 Material UI FormControl 的默认值?
- mysql - where 存在包含和排除语句
- reactjs - 如何使用 chrome.runtime 从 content.js 向 popup.js 传递数据?
- batch-file - 替换批处理文件中特殊参数 (%%A) 中的值
- php - Linux 路径在 docker #php 上的肥皂调用中被转换为 Windows 路径
- discord.js - TypeError: feature is not a function in discord.js 使用 WOK 教程
- python - boxplot 在 TypeError 中显示最大和最小传单结果:“AxesSubplot”对象不可下标
- json - Discord.py 将所有公会 ID 放入 json 文件中
- java - 潜在的 OptaPlanner/Drools 错误:奇怪的 MultiAccumulate ClassCastException