Konvertiere eine Datei (100Mo) in Base64 auf Android

8

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?

    
Labe 05.01.2015, 16:56
quelle

2 Antworten

8

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.

%Vor%     
Dalija Prasnikar 06.01.2015, 12:06
quelle
0
%Vor%     
Edwinfad 17.11.2016 07:28
quelle

Tags und Links