我通过REST服务发送一个字节数组。它被收到String。这是它的摘录。使用开始和结束标记。
[0,0,0,0,32,122,26,65,0,0,0,0,96,123,26,65,0,0,0,0,192,123,20,65,0,0,0,0,0,125,20,65,71,73,70,56,57,97,244,1,244,1,247,0,0,51,85,51,51,85,102,51,85,153,51,85,204,51,85,255,51,128,0,51,128,51,51,128,102,51,128,153,51,128,204,51,128,255,51,170,0,51,170,51,51,170,102,51,170,153,51,170,204,51,170,255,51,213,0,51,213,51,51,213,102,51,213,153,51,213,204,51,213,255,51,255,0,51,255,51,51,255,102,51,255,153,51,255,204,51]
现在,在任何人建议将其作为base64编码的字符串发送之前,这需要Blackberry实际上有一个可用的Base64解码器。但是,它失败了超过64k的文件,我尝试了很多。
无论如何,这是我尝试过的:
str = str.replace('[', ' ');
str = str.replace(']', ' ');
String[] tokens = split(str,",");
byte[] decoded = new byte[tokens.length];
for(int i = 0; i < tokens.length; i++)
{
decoded[i] = (byte)Integer.parseInt(tokens[i]);
}
但它失败了。 split与JAVA实现found here.
类似逻辑上应该有用吗?但事实并非如此。这适用于 JavaME / Blackberry 。请不要Java Answers(除非他们使用javaME)。
答案 0 :(得分:2)
一个小问题和一个痛苦问题。 轻微:空白(如Nikita所述) Major:转换为字节...因为java只有无符号字节,所以当从int转换为byte时,128和更高的字符将成为负数。
str = str.replace('[',' ');
str = str.replace(']', ' ');
String[] tokens = split(str,",");//String[] tokens = str.split(",");
byte[] decoded = new byte[tokens.length];
for (int i = 0; i < tokens.length; i++) {
decoded[i] = (byte) (Integer.parseInt(tokens[i].trim()) & 0xFF);
}
for(byte b:decoded) {
int tmp = ((int)b) & 0xff;
System.out.print("byte:"+tmp);
}
(顺便说一下:实现base64编码器/解码器并不是特别难 - 虽然你的项目可能“过度杀伤”)
答案 1 :(得分:1)
用空字符串替换括号,而不是空格:
str = str.replace('[', '');
str = str.replace(']', '');
在您的情况下,您有以下数组:
[" 0", "0", "0", ..., "204", "51 "]
第一个元素" 0"
无法解析为整数。
答案 2 :(得分:1)
我建议使用Base64编码的字符串来发送字节数组。
有a post with link to Base64 library for J2ME。
这种方式允许您将字节数组转换为字符串,稍后您可以将此字符串转换为字节数组。