Java: Wie "trim" ein byte-array?
So, ich habe einige code, der liest eine bestimmte Anzahl von bytes aus einer Datei und gibt das resultierende byte-array (das ist im Grunde verwendet, für chunking-up-Dateien zu senden sind, über das Netzwerk (irgendwann) base64-codierte ascii-text).
Funktioniert es einwandfrei, außer dass wenn der Letzte chunk der Datei generiert wird, ist es nicht, einen vollen chunk. Daher werden die resultierenden byte-array nicht voll ist. Es ist jedoch eine Konstante Größe, was bedeutet, dass die Datei wieder zusammengesetzt, es gibt eine ganze Reihe von zusätzlichen Daten (0 s vielleicht) am Ende angehängt.
Wie kann ich es so machen, dass das byte[] für den letzten chunk, der die Datei enthält nur die Daten, die er braucht? Der code sieht so aus:
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;
}
Also, wenn chunkSize größer ist als die restlichen bytes in die Datei, ein voller Größe byte[] wird zurückgegeben, aber es ist nur halb voll mit Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den Rückgabewert überprüfen der
RandomAccessFile.read()
zu bestimmen, die Anzahl der gelesenen bytes. Wenn es anders ist als die chunkSize, müssen Sie eine Kopie des array über ein kleineres und zurückgeben.==
nicht=
.System.arraycopy()
?System.arraycopy()
solltebytesRead
, nichtchunkSize
. Duh! Tut mir Leid, dass. Versuchen Sie es bitte mit meinem aktualisierten beantworten und bestätigen, dass es behoben ist. Vielen Dank 🙂RandomAccessFile.read()
gibt die Anzahl von bytes zu Lesen, so dass Sie tun können, kopieren Sie das array bei Bedarf:Wenn Sie mit Java-pre-6, dann müssen Sie implementieren
Arrays.copyOf
selbst:Können Sie auch die Größe der Datei zu berechnen, die die Verbleibende Anzahl von bytes.
Diese Weise müssen Sie nicht eine zusätzliche Arrays und müssen nicht die Kopie. Wahrscheinlich keine große Auswirkung.
Ein wichtiger Punkt IMO: überprüfen Sie den Rückgabewert von
read
ich denke, es kann weniger als die restlichen bytes. Die javadoc-Staaten: