Android - Base 64中的大数据,如何处理它

时间:2013-07-28 16:22:53

标签: java android json web-services base64

我有一个Web服务,它给了我一个名为'imagedata'的节点的json。它包含一个巨大的数据作为字符串。当我在浏览器中打印它时,它给了我有效的输入。 Base64编码的字符串以'='字符结尾。

我还在html页面中使用此标记对其进行了测试,它的工作原理非常好。

<img src="data:image/png;base64,MY_BASE64_ENCODED_STRING"/>

这是我的代码;

StringBuilder b64 = new StringBuilder(dataObj.getString("imagedata"));
byte[] decodedByte = Base64.decode(b64.toString(), 0);
bitmap = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);

请注意,此代码适用于较小的图像数据,但在较大的图像数据上会出现bad-base64异常

请帮助我, 感谢

1 个答案:

答案 0 :(得分:0)

为什么您的服务器为您提供base64编码? Base64只是通信而不是编码图像。如果它用于编码,它将使您的图像文件更大.IllegalArgumentException意味着您的图像编码格式不正确或无法解码。 在我的项目中,我现在只使用Base64发送图像。但它将由多部分改变。但是当服务器转发给收件人时。它只是转发图像的网址。所以我可以用这个简单的方法处理图像的URL:

public static Image loadImage(String url)
{
    HttpConnection connection = null;
    DataInputStream dis = null;
    byte[] data = null;

    try
    {
        connection = (HttpConnection) Connector.open(url);
        int length = (int) connection.getLength();
        data = new byte[length];
        dis = new DataInputStream(connection.openInputStream());
        dis.readFully(data);
    }
    catch (Exception e)
    {
        System.out.println("Error LoadImage: " + e.getMessage());
        e.printStackTrace();
    }
    finally
    {
        if (connection != null)
            try
            {
                connection.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        if (dis != null)
            try
            {
                dis.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }


    return Image.createImage(data, 0, data.length);
}

请注意J2ME的此代码。