我有一个由数组支持的现有ByeBuffer。现在我想从偏移到结尾获取此ByteBuffer的一部分,然后将一些数据(存储在其他字节数组中)附加到此切片的ByteBuffer的末尾。假设我在ByteBuffer和字节数组“buffer”中有“offset”,需要将其附加到ByteBuffer。这就是我现在正在做的事情 -
byte[] prevArray = previousByteBuffer.array();
byte[] newArray = new byte[prevArray.length-offset+buffer.length];
for(int i=offset; i<prevArray.length; i++){
newArray[i-offset] = prevArray[i];
}
for(int i=prevArray.length; i<(prevArray.length+len); i++){
newArray[i-offset] = buffer[i-prevArray.length];
}
ByteBuffer byteBuffer = ByteBuffer.wrap(newArray);
我认为我所做的事情非常低效。实现这一目标的有效方法是什么?感谢。
答案 0 :(得分:3)
您可以使用System.arraycopy。
我们可以使用
int len = prevArray.length-offset+buffer.length;
ByteBuffer bb = ByteBuffer.allocate(len);
bb.put(previousByteBuffer);
bb.put(buffer, offset, buffer.length - offset);
答案 1 :(得分:1)
你能做的最好的事情就是尽可能地预先分配最终的ByteBuffer。 arraycopy会有所帮助,但是杀死你的是重新复制原始数据。如果您可以使用某种启发式方法来更好地预测最终目标大小,则可以避免重新复制数据,并极大地加快整个过程。