如何将图像数据作为基本64字符串写入文本文件?

时间:2011-09-07 17:49:59

标签: java android image base64

即时尝试将图像数据写入文本文件作为基本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 个答案:

答案 0 :(得分:1)

听起来你只是用完了RAM。发生这种情况的一个原因是因为您将整个原始图像和整个base-64编码图像同时保存在内存中,即使只是短暂的。尝试使用变体:

,在for循环中一次将数据写入一个块
encodeToString(byte[] input, int offset, int len, int flags)

一次编码和写入几千个字节