fastjson如何解析byte数组返回?byte数组如何转换为int?

我们知道Byte是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符,那fastjson如何解析byte数组返回?下面来我们就来给大家讲解一下这方面的内容。

源代码

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Date;
import com.alibaba.fastjson.JSONObject;
public class TestStringBytes
{
    public static void main(String[] args)
    {
        System.out.println("测试string与 byte数组转换");
        testStringBytesConvert("abc123张三");
        System.out.println("测试json与byte数组转换");
        testJsonByteConvert();
    }
    /**
    * 测试string与 byte数组转换
    *
    * @param s
    */
    public static void testStringBytesConvert(String s)
    {
        try
        {
            byte[] ba = s.getBytes("UTF-8");
            String s_new = new String(ba, "UTF-8");
            System.out.println("原始字符串:\t" + s);
            System.out.println("byte数组地址:\t" + ba);
            System.out.println("输出byte数组:\t" + Arrays.toString(ba));
            System.out.println("转换为字符串:\t" + s_new);
            System.out.println("---------------------------");
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
    }
    /**
    * 测试json与byte数组转换
    */
    public static void testJsonByteConvert()
    {
        JSONObject json = new JSONObject();
        json.put("id", 1);
        json.put("name", "张三");
        json.put("birthday", new Date());
        json.put("age", 36);
        testStringBytesConvert(json.toString());
    }
}

输出结果

fastjson如何解析byte数组返回?byte数组如何转换为int?.png

byte数组如何转换为int?

Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些。这里简单说明一下byte数组和int的转换吧。

总所周知,int类型数据在Java中占据32 bit,byte占据8 bit,这样的话,正常情况下4个byte可以转换成一个int类型数据。

当然,不正常情况下,3个byte或者2个byte甚至1个byte都可以转换为int数据,只需要高位补上就行。

嗯,坑来了。由于Java中int类型是有符号的,最高位为符号位,为0的话表示正数,为1的话表示负数。

以四位byte数组为例,要拼接成一个32 bit的int数据的话,只需要将四个byte按顺序连接起来就行,这样的话,就需要对四个byte进行移位操作。

第一位左移24位,第二位左移16位,第三位左移8位,第四位不动。。然后进行或运算。。

嗯,看起来好像完美。。。然而之前说过Java是有符号的,对于后三个byte,如果是负数的话,则高位都是1,这样高位的或运算将失效,前面的byte数据也就没有意义。

因此,对于后三个byte数据,进行移位操作前需要和0XFF进行与运算,消除高24位。

代码如下

public int bytesToInt(byte[] bytes){

return bytes[0]<<24|(bytes[1]&0xff)<<16|(bytes[2]&0xff)<<8|(bytes[3]&0xff);

}

对于不正常的情况,比如3个byte转换为int,则第一个左移16位,第二位与0xff后左移8位,第三位与0xff,然后进行或运算即可。

同理可运用于2个byte。

对于1个byte,直接强制转换为int即可。

嗯。。大概就是这样,第一位移位,之后的分别和0xff相与后再移位,最后进行或运算即可。

后来,闲着无聊,如果一个byte数组超过4位后,怎么办?当然返回一个int数组就行啦,反正4位byte转换成1个int,看着办就行。

public int[] bytesToInts(byte[] bytes)
{
    int bytesLength = bytes.length;
    int[] ints = new int[bytesLength % 4 == 0 ? bytesLength / 4 : bytesLength / 4 + 1];
    int lengthFlag = 4;
    while (lengthFlag <= bytesLength)
    {
        ints[lengthFlag / 4 - 1] = (bytes[lengthFlag - 4] << 24) | (bytes[lengthFlag - 3] & 0xff) << 16 |
            (bytes[lengthFlag - 2] & 0xff) << 8 | (bytes[lengthFlag - 1] & 0xff);
        lengthFlag += 4;
    }
    for (int i = 0; i < byteslength + 4 - lengthflag; i++)
    {
        < p = "" >
            if (i == 0) ints[lengthFlag / 4 - 1] |= bytes[lengthFlag - 4 + i] << 8 * (bytesLength + 4 - lengthFlag - i - 1);
            else ints[lengthFlag / 4 - 1] |= (bytes[lengthFlag - 4 + i] & 0xff) << 8 * (bytesLength + 4 - lengthFlag - i - 1);
    }
    return ints;
}

这样就完成了byte数组转换为int,其实在java中还有很多数组需要进行转换的,而作为程序员我们需要掌握好这些转换技巧,才能更好的进行开发!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

json格式如何创建?json怎样创建简单的对象?

线程池面试题有哪些?线程池面试常见问题

java程序员怎么才能进大厂?java程序员进大厂诀窍!