android中的Base64中的OutOfmemory异常

时间:2013-01-08 14:56:43

标签: android base64

我有一个像contact contentprovider这样的数据库,因为用户可以捕获每个联系人的图像,捕获后,我将图像编码到base64并保存到文件中,并用文件的路径更新该图像字段,并且如果用户在线,则将所有联系人同步到服务器,并且我在需要时从服务器获取所有这些数据,而我从文件中获取图像我面临outofmemory异常base64,如果我将图像保存在数据库是解决问题的?

1 个答案:

答案 0 :(得分:1)

当您尝试对整个图像进行编码时,图像通常会导致Android中出现OutOfMemoryException。为此,以块的形式读取图像数据,然后在块上应用编码后,将块保存在临时文件中。编码完成后,对编码的图像文件执行任何操作。

这是从文件中编码图像并使用块保存在文件中的代码..

    String imagePath = "Your Image Path";        
    String encodedImagePath = "Path For New Encoded File"; 
    InputStream aInput;
    Base64OutputStream imageOut = null;
    try {
        aInput = new FileInputStream(imagePath);

        // carries the data from input to output :
        byte[] bucket = new byte[4 * 1024];
        FileOutputStream result = new FileOutputStream(encodedImagePath);
        imageOut = new Base64OutputStream(result, Base64.NO_WRAP);
        int bytesRead = 0;
        while (bytesRead != -1) {
        // aInput.read() returns -1, 0, or more :
        bytesRead = aInput.read(bucket);
        if (bytesRead > 0) {
            imageOut.write(bucket, 0, bytesRead);
            imageOut.flush();
        }
        imageOut.flush();
        imageOut.close();
    } catch (Exception ex) {
        Log.e(">>", "error", ex);
    }