解码从entity.getContent()中的Internet收到的base64图像

时间:2015-03-22 12:58:49

标签: java php android http

我将从base64格式的图像从PHP发送到Android。 在android方面,以前当我是entity.toString()时它工作正常。 我能够解码结果并创建一个位图。 但现在我想跟踪图像的下载量。所以我使用response.getHeaders(" Content-Length")和entity.getContent(); 从InputStream我将它读入byte []数组。我怎么读过,我把它转换成一个字符串。并附加到最​​终的image_base64 问题是我没有在最终的String中获得相同的原始base64值。 还有其他办法吗?

       buf = new byte[totalSize];
        do {
            numBytesRead = stream.read(buf, numBytesRead, totalSize);
            String temp = Base64.encodeToString(buf,Base64.DEFAULT);
            image_base64 = image_base64 + temp;
            buf = new byte[totalSize];
            if (numBytesRead > 0) {
                downloadedSize += numBytesRead;
                dialog.setProgress((downloadedSize/totalSize)*100);
            }
        } while (numBytesRead > 0);

1 个答案:

答案 0 :(得分:1)

  1. 为什么甚至根本使用base64?为什么不在PHP中按原样输出图像并使用Android上的字节数组呢?为什么要浪费带和处理能力?

  2. base64字符串不匹配的原因可能是因为您收到它时编码而不是解码

    < / LI>
  3. 你不能只编码/解码base64字符串的一部分,你需要拥有整体。

  4. downloadedSize中使用numBytesRead代替stream.read,否则您将覆盖以前收到的数据。

  5. 所以,如果你真的想使用base64:

    buf = new byte[totalSize];
    while(downloadedSize < totalSize)
    {
        numBytesRead = stream.read(buf, downloadedSize, totalSize);
        if(numBytesRead > 0)
        {
            downloadedSize += numBytesRead;
            dialog.setProgress((downloadedSize/totalSize)*100);
        }
    }
    image_base64 = new String(buf);
    // Now base64-decode it