1

我通过 REST 服务发送一个字节数组。它作为字符串接收。这是它的摘录。带有开始和结束标签。

[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 的文件,它会失败,并且我已经尝试过alsorts。

无论如何,这是我尝试过的:

        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 实现。

逻辑上它应该工作?但它不是。这是针对JavaME/Blackberry的。请不要 Java 答案(除非他们在 javaME 上工作)。

4

3 回答 3

2

两个问题,一个是小问题,一个是痛苦的问题。Minor:whitespaces (Nikita 提到) Major:casting to bytes ... 因为java 只有无符号字节,128 和更高的值在从int 转换为byte 时会变成负数。

    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 编码器/解码器并不是特别难——不过对你的项目来说可能是“矫枉过正”)

于 2012-04-27T11:34:12.640 回答
1

用空字符串替换括号,而不是空格:

str = str.replace('[', '');
str = str.replace(']', '');

在您的情况下,您有以下数组:

[" 0", "0", "0", ..., "204", "51 "]

第一个元素" 0"无法解析为整数。

于 2012-04-27T11:11:38.160 回答
1

我推荐使用 Base64 编码的字符串来发送字节数组。

一个帖子链接到 J2ME 的 Base64 库

这种方式允许您将字节数组转换为字符串,稍后您可以将此字符串转换为字节数组。

于 2012-04-27T12:00:33.107 回答