转换JSON byteArray的两种方式之间的区别

时间:2017-08-15 06:33:47

标签: hashmap android-bitmap

我有这样的json图像响应:

"UserImage":[
255,
216,
255,
224,
0,.....]

我有两种方法可以对字节数组做出响应:

1 -

        JSONArray resultImage = result.getJSONArray("UserImage");
        byte[] byteUserImage = resultImage.toString().getBytes();
        hashUserImageMap.put(userId, byteUserImage);

2-

            byte[] tmp=new byte[result.getJSONArray("UserImage").length()];
        for(int i=0;i<result.getJSONArray("UserImage").length();i++){
            tmp[i]=(byte)(((int)result.getJSONArray("UserImage").get(i)) & 0xFF);
        }
        hashUserImageMap.put(userId, tmp);

以第二种方式我可以将byteArray转换为位图:

byte[] arr = getMapInstance().get(name);                 
Bitmap bitmap = BitmapFactory.decodeByteArray(arr, 0, arr.length);

但首先这个位图为空。 我想知道这两种方式之间的差别在哪里?

1 个答案:

答案 0 :(得分:1)

第一种方法调用resultImage.toString.getBytes。这将创建一个JSON字符串,然后为其中包含的每个字符提供ASCII值。

对于"[42]",您将获得以下字节:[0x5B, 0x34, 0x32, 0x5D]。它们都是错的,它们太多了。您的BitmapFactory会拒绝它。

第二种方法逐个元素遍历数组,将那里找到的数字视为一个字节值,并构造一个新数组。

对于"[42]",您将获得[0x2A](这就是您想要的)。