Chapter 6 自定義資料協議【第十四講】ByteBuffer 和 ChannelBuffers
阿新 • • 發佈:2019-02-19
ByteBuffer: 通過ByteBuffer 完成資料序列化,但是ByteBuffer.allocate(N) 必須提前設定ByteBuffer容量,無法擴容
public static void main(String[] args) throws IOException { int id = 123456789; int age = 21; //無法擴容 ByteBuffer buffer = ByteBuffer.allocate(4+4+8); buffer.putInt(id); buffer.putInt(age); buffer.putLong(1); System.out.println(Arrays.toString(buffer.array())); buffer = ByteBuffer.wrap(buffer.array()); System.out.println(buffer.getInt()); System.out.println(buffer.getInt()); System.out.println(buffer.getLong()); }
ChannelBuffer:通過ChannelBuffer完成資料序列化,可以自動擴容ChannelBuffers.dynamicBuffer()
public static void main(String[] args) throws IOException { int id = 123456789; double money = 100.05; // 無法擴容 ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(); buffer.writeInt(id); buffer.writeDouble(money); buffer.writeLong(1); buffer.writeShort("ABC".getBytes().length); buffer.writeBytes("ABC".getBytes()); byte[] bytes = new byte[buffer.writerIndex()]; buffer.readBytes(bytes); System.out.println(Arrays.toString(bytes)); // ------------------------------------------ buffer = ChannelBuffers.wrappedBuffer(bytes); System.out.println(buffer.readInt()); System.out.println(buffer.readDouble()); System.out.println(buffer.readLong()); byte[] value = new byte[buffer.readShort()]; buffer.readBytes(value); System.out.println(new String(value)); }
所有原始碼下載 :https://download.csdn.net/download/netcobol/10308871