2010-02-12 3 views
25

Ist es möglich, spezifische Bytes von einem Bytearray in Java zu erhalten?Teilen eines Bytearrays

Ich habe ein Byte-Array:

byte[] abc = new byte[512]; 

und ich möchte 3 verschiedene Byte-Arrays aus diesem Array haben.

  1. Byte 0-127
  2. Byte 128-255
  3. byte256-511.

Ich versuchte abc.read(byte[], offset,length) aber es funktioniert nur, wenn ich als Offset 0 geben, für einen anderen Wert, den es eine IndexOutOfbounds Ausnahme auslöst.

Was mache ich falsch?

+0

Der Offset befindet sich im Zielarray, nicht im Quellbereich. – charlie

Antwort

58

Sie können Arrays.copyOfRange() dafür verwenden.

+4

Whoa. Wusste das nicht. –

+0

@ Jonathan Feinberg: Es ist neu in Java 6. – Powerlord

+0

Vielen Dank. Das funktioniert ohne Fehler !!! –

12

Arrays.copyOfRange() wird in Java 1.6 eingeführt. Wenn Sie eine ältere Version haben, wird intern System.arraycopy(...) verwendet. Hier ist, wie es implementiert ist:

+0

-1 Dies ist nicht das Gleiche wie die Standardversion. Es ist nicht typsicher (Sie können es an 'Integer []' übergeben und das Ergebnis einer 'String []' - Variable zuweisen.) 'Arrays.copyOfRange (T [], int, int)' gibt 'T [] zurück '. Möglicherweise mischen Sie es mit der anderen Version, die ein 'Class'-Argument verwendet. – finnw

+1

@finnw: Die andere Methode ist nur überlastet. Ich habe sie verschmolzen, aber vergessen, den 2. Typ Parameter zu entfernen. Jetzt ist es behoben. – Bozho

1

Sie können Byte-Puffer als Ansichten über das ursprüngliche Array auch verwenden.