Así que tengo un código que lee una cierta cantidad de bytes de un archivo y devuelve la matriz de bytes resultante (esto se usa básicamente para fragmentar archivos para enviar a través de la red como (eventualmente) texto ascii codificado en base64).Java: ¿Cómo "recortar" una matriz de bytes?
Funciona bien, excepto que cuando se genera la última parte del archivo, no es un fragmento completo. Por lo tanto, la matriz de bytes resultante no está completa. Sin embargo, es un tamaño constante, lo que significa que el archivo se vuelve a ensamblar. Hay un montón de datos adicionales (posiblemente de 0) añadidos al final.
¿Cómo puedo hacer para que el byte [] para el último fragmento del archivo realmente solo contenga los datos que necesita? El código es el siguiente:
private byte[] readData(File f, int startByte, int chunkSize) throws Exception {
RandomAccessFile raf = new RandomAccessFile(f, "r");
raf.seek(startByte);
byte[] data = new byte[chunkSize];
raf.read(data);
raf.close();
return data;
}
Así que si chunkSize es más grande que el resto de bytes en el archivo, un byte de tamaño completo [] es retornada pero es sólo la mitad con los datos.
Usando Arrays.copyOf del poste anterior en lugar de System.arraycopy (que lanzó una excepción), ¡esto funcionó a la perfección! ¡Gracias! –
Corregido, tuve un error tipográfico en la comparación, debería haber usado '==' not '='. – notnoop
@Erin Drummond: ¿Cuál fue la excepción lanzada por 'System.arraycopy()'? – Asaph