1

假设我有一个 list/arrayList 或一个 ByteBuffers 数组(List<ByteBuffer>ByteBuffer[]

有可能直接从上面的数组中获取字节而不遍历所有项目或计算它们的总大小?我正在寻找这样的东西:

ByteBuffer[] bufferList = new ByteBuffer[7]; //this can be any kind of list of ByteBuffers
//add items to the array
ByteBuffer buffer = (ByteBuffer) bufferList; //what i want to achieve  

当然最后一行是不正确的。

问题是我已经在数组中按顺序排列了所有字节,但我希望它们不再在列表中,而是在单个 ByteBuffer 中。那么有什么东西可以从 ByteBuffers 的列表/数组中创建一个 ByteBuffer 吗?

谢谢!

4

2 回答 2

4
public ByteBuffer convertToOne(ByteBuffer[] src)
{
    int size=0;
    for(int i = 0 ; i < src.length ; i++) {
        size+=src[i].array().length;
    }

    ByteBuffer newBuffer = ByteBuffer.allocate(size);

    int sizeAt = 0;
    for(int i = 0 ; i < src.length ; i++) {
        newBuffer.put(src[i].array(), sizeAt);
        sizeAt += src[i].array().length;
    }
    return newBuffer;
}
于 2013-08-27T15:18:00.777 回答
0

我相信您将不得不创建一个新ByteBuffer缓冲区并将每个缓冲区复制bufferList到新缓冲区中。您应该将此功能放在一个方法中,以免每次使用它时都重复代码。

于 2013-08-27T15:14:58.420 回答