我们知道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()); } }
输出结果
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工具网。
推荐阅读: