ByteBuffer.get(byte[] dst,int offset,int length)

alexgw

Mitglied
Hallo,

ich hab ein kleines Problem mit der get Funktion von ByteBuffer. Mein Sourcebuffer ist ca. 950000 lang. Nun möchte ich ein Segment in Form eines Bytearray haben, z.B. von der Position 5 die nächsten 64 byte. Die Methode funktioniert, wenn der Offset 0 ist. Benutzt man einen Offset größer 0 bekomme ich eine java.lang.IndexOutOfBoundsException. Bin dankbar für jeden weiteren Hinweis auf meinen Fehler.


Java:
	/*
	 * getSubarray(offset,length, ByteBuffer)
	 * @ param offset Number of Startbyte of the subarray in full array
	 * @ param subarraylength Length of subarray
	 * @ param  Sourcearray Full Array from which the subarray comes from
	 * @return Bytearray
	*/
	private byte[] getSubarray(int offset, int subarraylength, ByteBuffer Sourcebuffer){
		return Sourcebuffer.get(new byte[subarraylength],offset,subarraylength).array();
	}
 
Zuletzt bearbeitet:
Du interpretierst die Parameter der Methode ByteBuffer.get(byte[], int, int) falsch. Der offset bestimmt die Startposition im Zielarray. Es ist nicht möglich, so für den ByteBuffer den offset anzugeben. Was gehen könnte, wäre folgendes:
Java:
static byte[] getSubarray(final int offset, final int subArrayLength, final ByteBuffer sourceBuffer){
  final byte[] result = new byte[subArrayLength];
  for(int i = 0; i < result.length; i++ {
    result[i] = sourceBuffer.get(i + offset);
  }
  return result;
}
Gibt vielleicht elegantere Wege, habe mir nicht alle Methoden des ByteBuffer angeschaut.
 
Hab's nicht ganz nachvollzogen, aber du meinst vielleicht sowas wie

ByteBuffer bb = ...
bb.position(5);
ByteBuffer startingAt5 = bb.slice(); // <-- das hier

Von dem startingAt5 kann man sich dann die "hinteren 950000-5 bytes des Originalbuffers" holen. (Das "slice" funktioniert auch zusammen mit "limit", d.h. damit kann man wirklich einen "Unterbuffer" erstellen)
 

Zurück
Oben