Как записать данные изображения в текстовый файл в виде базовой строки 64? - PullRequest
3 голосов
/ 07 сентября 2011

Я пытаюсь записать данные изображения в текстовый файл в виде базовой строки 64. Это работает, если он не содержит много информации, но когда он содержит довольно много информации, он вылетает из приложения, говоря, что его нехватка памяти ниже - мой код:

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);
}

    }

я делаю что-то не так или есть лучший способ сделать это?

заранее спасибо

1 Ответ

1 голос
/ 07 сентября 2011

Звучит так, будто у вас просто не хватает оперативной памяти. Одна из причин, по которой это происходит, заключается в том, что вы держите в памяти все исходное изображение и все кодированное в base-64 изображение одновременно, даже если ненадолго. Попробуйте записать данные из порции в цикле for, используя вариацию:

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

И кодирование и запись нескольких тысяч байтов за раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...