Java:如何将字节数组转换为JSON字符串(要转换为JSON对象)



我看到了一个android教程,看到了以下我不太理解的方法:

public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

这个方法的主要用途是将在websocket上接收到的字节数组转换为json字符串,该字符串将被转换成json对象,如下所示:

@Override
            public void onMessage(byte[] data) {
                Log.d(TAG, String.format("Got binary message! %s",
                        bytesToHex(data)));
                // Message will be in JSON format
                parseMessage(bytesToHex(data));
            }
....
private void parseMessage(final String msg) {
        try {
            JSONObject jObj = new JSONObject(msg);
...

bytesToHex方法是如何工作的?我只知道它在字节数组中循环,然后执行and运算,使字节保持原样(我不认为这有什么意义)。说完那句话,我就迷路了。>>做什么?

例如,j现在是0bytes[j]现在是1110 1111

我认为int v = bytes[j] & 0xFF;相当于int v = bytes[j];,因为在Java中,一个字节占用8个比特,而0xFF是8个设置比特(11111111)和11101111&11111111等于11101111。

现在v是1110 1111

hexChars[j * 2] = hexArray[v >>> 4];将v(1110)的高4位映射到char,并将其保存到hexChars[0],因为>>>是"向右移动位并填充零",所以1110 1111>>4等于0000 1110。

hexChars[j * 2 + 1] = hexArray[v & 0x0F];将v(1111)的低4位映射到char,并将其保存到hexChars[1],因为11101111&0000 1111(0x0F)等于0000 1111。

关于为什么这样的字符串可以被解析为JSON,我想你必须阅读一些关于数组hexArray的内容,以了解从0000到1111的整数是如何映射到char的,这样你就可以知道输出字符串是什么样子的。

相关内容

  • 没有找到相关文章

最新更新