Java: Speicher effizient ByteArrayOutputStream

Habe ich eine 40MB Datei in der Festplatte und ich muss auf "Karte", die es in den Speicher mit einem byte-array.

Zuerst dachte ich, dass das schreiben der Datei in ein ByteArrayOutputStream wäre der beste Weg, aber ich finde es dauert etwa 160 MB heap-Speicher in einem bestimmten Augenblick während des Kopiervorgangs.

Weiß jemand einen besseren Weg, dies zu tun, ohne Verwendung von drei mal die Größe der Datei RAM?

Update: Dank für Eure Antworten. Ich bemerkte, dass ich konnte der Speicherverbrauch ein wenig erzählen ByteArrayOutputStream ersten Größe, ein bisschen größer als der original-Dateigröße (über die genaue Größe mit meinem code Kräfte Umverteilung, haben zu prüfen, warum).

Gibt es ein weiteres high-memory-spot: wenn ich byte[] zurück mit ByteArrayOutputStream.toByteArray. Ein Blick auf den source code ich es sehen kann, ist das Klonen array:

public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}

Dachte ich, ich könnte einfach erweitern ByteArrayOutputStream und schreiben Sie diese Methode, also zur Rückgabe des original-array direkt. Gibt es eine potenzielle Gefahr ist hier, da der stream und das byte-array nicht mehr als einmal verwendet werden?

InformationsquelleAutor der Frage user683887 | 2011-08-31

Schreibe einen Kommentar