Quindi ho un codice che legge una certa quantità di byte da un file e restituisce l'array di byte risultante (questo è fondamentalmente usato per frammentare i file da inviare sulla rete come (eventualmente) testo ASCII codificato in base 64).Java: come "tagliare" un array di byte?
Funziona correttamente, tranne che quando viene generato l'ultimo blocco del file, non è un blocco completo. Di conseguenza, l'array di byte risultante non è pieno. Tuttavia, è una dimensione costante, il che significa che il file viene riassemblato, vi è una serie di dati aggiuntivi (gli 0 forse) aggiunti alla fine.
Come posso fare in modo che il byte [] dell'ultimo blocco del file contenga solo i dati necessari? Il codice è simile al seguente:
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;
}
Quindi, se chunksize è più grande dei restanti byte del file, un byte pieno di dimensioni [] ottiene rinviato, ma il suo unico mezzo pieno con i dati.
Uso Arrays.copyOf dalla carica sopra invece di System.arraycopy (che ha gettato un'eccezione), questo ha funzionato perfettamente! Grazie! –
Corretto, ho avuto un refuso nel confronto, avrei dovuto usare '==' not '='. – notnoop
@Erin Drummond: Qual è stata l'eccezione lanciata da 'System.arraycopy()'? – Asaph