第九課 自定義序列化協議

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);

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章