3 Stimmen

Wie schreibe ich Bilddaten als Base 64-String in eine Textdatei?

Ich versuche, Bilddaten in eine Textdatei als Base 64 String seine Arbeit zu schreiben, wenn es nicht zu viele Informationen enthält, aber wenn es ziemlich viele Informationen enthält, stürzt die Anwendung sagen, dass seine aus dem Speicher unten ist mein Code:

package com.search.visual;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Base64;
import android.util.Log;
import android.widget.Toast;

public class SavePhotoTask extends AsyncTask<byte[], String, String>{
    String name;
    byte[] num;
    @Override
    protected String doInBackground(byte[]... params) {
        // TODO Auto-generated method stub
    File photo = new File(Environment.getExternalStorageDirectory(),".vis/image.xml");

    name = Base64.encodeToString(params[0], 0);

    //return base64String;
    if (photo.exists()){
        photo.delete();
    }
    try{

        FileWriter fi = new FileWriter(photo.getPath());
        fi.write("<Image>\n\t<Data>");
        fi.write(name);

        fi.write("</Data>\n</Image>");
        fi.close();

    }catch (IOException e) {
        // TODO: handle exception
        Log.e("pictureDemo","exception", e);
    }

    return (null);
}

    }

Mache ich etwas falsch oder gibt es einen besseren Weg, dies zu tun?

Ich danke Ihnen im Voraus

1voto

acjay Punkte 31336

Das klingt, als ob Ihnen einfach der Arbeitsspeicher ausgeht. Ein Grund dafür ist, dass Sie das gesamte Originalbild und das gesamte Base-64-kodierte Bild gleichzeitig im Speicher halten, auch wenn dies nur kurz der Fall ist. Versuchen Sie, die Daten Stück für Stück in einer for-Schleife auszulesen, indem Sie die Variation verwenden:

encodeToString(byte[] input, int offset, int len, int flags)

Und das Verschlüsseln und Schreiben von ein paar tausend Bytes auf einmal

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X