把Arraylist<byte[]>的多个byte[]合成一个byte[] :鹿鸣的脱发日记

本文介绍了如何通过循环遍历和System.arraycopy方法将ArrayList<byte[]>合并成一个大的byte[],以便进一步利用Unpooled.wrappedBuffer转换为Netty的ByteBuf对象,用于WebSocket的数据传输。在处理语音识别的场景中,这个技巧可以有效地整合多个byte[]数据流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环遍历byte[]通过System.arraycopy实现

因为我需要封装一段完整的数据流通过netty-websocket发送服务端进行语音识别操作。

websocket中传送的对象是ByteBuf,因为没有现成的方法将ArrayList<byte[]>对象转换成ByteBuf,所以我尝试先将ArrayList<byte[]>转换成byte[],这样再通过Unpooled.wrappedBuffer(byte[])就可以转换成我想要的ByteBuf对象了。好了思路有了,代码怼上!

//需要处理的是一个ArrayList<byte[]> bytes
int lengthByte = 0;
for(byte[] by : bytes){
    lengthByte +=by.length;
}
byte[] allbyte = new byte[lengthByte];
int countLength=0;
for(byte[] by : bytes){
    System.arraycopy(by,0,allbyte,countLength,by.length);
    countLength+=by.length;
}
// 现在得到的allbyte对象就是拼接完成的byte[] 
//参考练手代码 注意  自己使用时要根据自己输入的参数类型进行代码设计!

private static byte[] byteMerger(byte[]... byteList) {
    int lengthByte = 0;
        for (int i = 0; i < byteList.length; i++) {
            lengthByte += byteList[i].length;
        }
        byte[] allByte = new byte[lengthByte];
        int countLength = 0;
        for (int i = 0; i < byteList.length; i++) {
            byte[] b = byteList[i];
            System.arraycopy(b, 0, allByte, countLength, b.length);
            countLength += b.length;
        }
        return allByte;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值