切片ByteBuffer并将数据附加到它的有效方法

时间:2014-07-20 22:12:18

标签: java performance nio bytebuffer

我有一个由数组支持的现有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);

我认为我所做的事情非常低效。实现这一目标的有效方法是什么?感谢。

2 个答案:

答案 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会有所帮助,但是杀死你的是重新复制原始数据。如果您可以使用某种启发式方法来更好地预测最终目标大小,则可以避免重新复制数据,并极大地加快整个过程。