我有这样的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);
但首先这个位图为空。 我想知道这两种方式之间的差别在哪里?
答案 0 :(得分:1)
第一种方法调用resultImage.toString.getBytes
。这将创建一个JSON字符串,然后为其中包含的每个字符提供ASCII值。
对于"[42]"
,您将获得以下字节:[0x5B, 0x34, 0x32, 0x5D]
。它们都是错的,它们太多了。您的BitmapFactory
会拒绝它。
第二种方法逐个元素遍历数组,将那里找到的数字视为一个字节值,并构造一个新数组。
对于"[42]"
,您将获得[0x2A]
(这就是您想要的)。