第九课 自定义序列化协议

来源:互联网 发布:大数据时代 全本下载 编辑:程序博客网 时间:2024/05/21 21:41
public class Test1 {    public static void main(String[] args) throws IOException {        int id= 101;        int age= 21;        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        byteArrayOutputStream.write(int2byte(id));        byteArrayOutputStream.write(int2byte(age));        byte[] byteArray = byteArrayOutputStream.toByteArray();        System.out.println(Arrays.toString(byteArray));        System.out.println("==================================");        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);        byte[] idbytes = new byte[4];        byteArrayInputStream.read(idbytes);        System.out.println("id:"+byte2int(idbytes));        byte[]  agebytes = new byte[4];        byteArrayInputStream.read(agebytes);        System.out.println("age:"+byte2int(agebytes));    }    /**     * @param i     * @return bytes     * @category 大端字节序列(先写高位,在写低位)=====小端字节序列(先写低位,在写高位)     */    public static byte[] int2byte(int i){        byte[] bytes=new byte[4];        bytes[0]=(byte)(i>>3*8);        bytes[1]=(byte)(i>>2*8);        bytes[2]=(byte)(i>>1*8);        bytes[3]=(byte)(i>>0*8);        return bytes;    }    /**     * @param b     */    public static int byte2int(byte[] b){        return  b[0]<<3*8|                b[1]<<2*8|                b[2]<<1*8|                b[3]<<0*8;    }}

public class Test2 {    public static void main(String[] args) {        int id= 101;        int age= 21;        //指定大小  固定不变        ByteBuffer byteBuffer = ByteBuffer.allocate(8);        byteBuffer.putInt(id);        byteBuffer.putInt(age);        //java.nio.BufferOverflowException  buffer溢出  无法动态调整大小        //byteBuffer.putLong(1L);        byte[] array = byteBuffer.array();        System.out.println(Arrays.toString(array));        ByteBuffer byteBuffer2 = ByteBuffer.wrap(array);        System.out.println("id"+byteBuffer2.getInt());        System.out.println("age"+byteBuffer2.getInt());        System.out.println();    }}

public class Test3 {    public static void main(String[] args) {        ChannelBuffer dynamicBuffer = ChannelBuffers.dynamicBuffer();        dynamicBuffer.writeInt(101);        dynamicBuffer.writeDouble(80.1);        //byte[] stringByte = "abc".getBytes();        byte[] bytes = new byte[dynamicBuffer.writerIndex()];        dynamicBuffer.readBytes(bytes);        System.out.println(Arrays.toString(bytes));        //反序列化        ChannelBuffer wrappedBuffer = ChannelBuffers.wrappedBuffer(bytes);        System.out.println(wrappedBuffer.readInt());        System.out.println(wrappedBuffer.readDouble());    }}

public class Test4 {    public static void main(String[] args) {        //自定义序列化接口 该类继承了自定义的Serializer类        Player player = new Player();        player.setAge(20);        player.setPlayId(100);        player.getSkills().add(1);        byte[] bytes = player.getBytes();        System.out.println(Arrays.toString(bytes));        Player player2 = new Player();        player2.readFromBytes(bytes);        System.out.println(player2);    }}
原创粉丝点击