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