我有一個由數組支持的現有ByeBuffer。現在我想從一個偏移量中獲取這個ByteBuffer的一部分到最後,然後將一些數據(存儲在其他字節數組中)附加到這個分片的ByteBuffer的末尾。假設我在ByteBuffer和字節數組「緩衝區」中有「偏移量」,需要將其添加到ByteBuffer中。這就是我現在正在做的 -有效的方法來分片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);
我認爲我所做的是非常低效。什麼是實現這一目標的有效方式?謝謝。
經典的XY問題。你試圖完成的實際任務是什麼? – EJP
@EJP實際的情況是我正在寫一個函數,它將從文件中讀取一個字節範圍,並且這個範圍被輸入到我的函數中。每次函數被調用時,我都會檢查範圍以查看它是否與我讀取的最後一個數據重疊,如果是,我不想重新讀取重疊的數據。因此,切片並追加。 – Parag
我建議它會更快*不*要做到這一點。讓文件系統進行緩存。它真的很擅長這個。或者如果文件不是很大,可以使用'MappedByteBuffer'。我還將注意力集中在['ByteBuffer.slice()'](http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#slice())方法。 – EJP