即时尝试将图像数据写入文本文件作为基本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);
}
}
我做错了什么或者有更好的方法吗?
提前谢谢
答案 0 :(得分:1)
听起来你只是用完了RAM。发生这种情况的一个原因是因为您将整个原始图像和整个base-64编码图像同时保存在内存中,即使只是短暂的。尝试使用变体:
,在for循环中一次将数据写入一个块encodeToString(byte[] input, int offset, int len, int flags)
一次编码和写入几千个字节