Ich versuche, eine Datei von der SD-Karte zu Base64 zu konvertieren, aber es scheint, dass die Datei zu groß ist und ich einen OutOfMemoryError bekomme.
Hier ist mein Code:
%Vor%Gibt es eine Möglichkeit, den OutOfMemoryError beim Ablegen der String attachedFile zu umgehen?
Base64
encoding benötigt 3 Eingabebytes und konvertiert sie in 4 Bytes. Wenn Sie also eine 100 Mb Datei haben, wird diese in 133% Mb in Base64
enden. Wenn Sie es in eine Java-Zeichenkette konvertieren ( UTF-16
), wird die Größe verdoppelt. Ganz zu schweigen davon, dass Sie während des Konvertierungsprozesses irgendwann mehrere Kopien im Speicher haben. Egal, wie du das drehst, es wird kaum funktionieren.
Dies ist etwas mehr optimierter Code, der Base64OutputStream
verwendet und weniger Speicherplatz benötigt als Ihr Code, aber ich würde nicht den Atem anhalten. Mein Rat wäre, diesen Code weiter zu verbessern, indem ich die Umwandlung in String überspringe und den temporären Dateistream als Ausgabe anstelle von ByteArrayOutputStream
verwende.
Tags und Links android base64 file android-file