2010-02-12 17 views
25

¿Es posible obtener bytes específicos de una matriz de bytes en Java?División de una matriz de bytes

que tienen una matriz de bytes:

byte[] abc = new byte[512]; 

y quiero tener 3 diferentes matrices de bytes de esta matriz.

  1. byte 0-127
  2. bytes 128-255
  3. byte256-511.

me trataron abc.read(byte[], offset,length) pero funciona sólo si me dan Offset como 0, para cualquier otro valor que se produce una excepción IndexOutOfbounds.

¿Qué estoy haciendo mal?

+0

El desplazamiento está en la matriz de destino, no en la fuente. – charlie

Respuesta

58

Puede usar Arrays.copyOfRange() para eso.

+4

Whoa. No sabia sobre eso. –

+0

@Jonathan Feinberg: Es nuevo en Java 6. – Powerlord

+0

Muchas gracias. Esto funciona sin ningún error! –

12

Arrays.copyOfRange() se presenta en Java 1.6. Si tiene una versión anterior, está internamente usando System.arraycopy(...). Así es como está implementado:

public static <U> U[] copyOfRange(U[] original, int from, int to) { 
    Class<? extends U[]> newType = (Class<? extends U[]>) original.getClass(); 
    int newLength = to - from; 
    if (newLength < 0) { 
     throw new IllegalArgumentException(from + " > " + to); 
    } 
    U[] copy = ((Object) newType == (Object)Object[].class) 
     ? (U[]) new Object[newLength] 
     : (U[]) Array.newInstance(newType.getComponentType(), newLength); 
    System.arraycopy(original, from, copy, 0, 
        Math.min(original.length - from, newLength)); 
    return copy; 
} 
+0

-1 esto no es lo mismo que la versión estándar. No es seguro para tipos (puede pasarlo como 'Integer []' y asignar el resultado a una variable 'String []'.) 'Arrays.copyOfRange (T [], int, int)' returns 'T [] '. Puede mezclarlo con la otra versión que toma un argumento de 'Clase'. – finnw

+1

@finnw: el otro método está sobrecargado. Los fusioné pero olvidé eliminar el parámetro del 2do tipo. Ahora está arreglado. – Bozho

1

Puede usar los búferes de bytes como vistas en la parte superior de la matriz original también.

Cuestiones relacionadas