java NIO ByteBuffer 使用技巧
所属分类 nio
浏览量 60
初始化:
ByteBuffer.allocate(int capacity)
ByteBuffer newBuffer = ByteBuffer.allocate(1024);
创建了一个容量为1024字节的缓冲区
ByteBuffer.wrap(byte[] array)
将一个现有的字节数组包装成一个缓冲区
写入数据:
put(byte b) 或 put(byte[] b)
向缓冲区中添加一个字节或一个字节数组
写入基本类型的put方法,如putChar(char)、putInt(int)等。
读取数据:
使用flip()方法将缓冲区从写模式切换到读模式
flip()方法会将position设置为0,并将limit设置为当前position的值
使用get()方法从缓冲区中读取数据
byte b = buffer.get();
从缓冲区中读取一个字节
处理字节序:
在读写基本类型数据时,需要注意字节序的问题。
Java NIO提供了order()方法来设置和获取字节序,默认是大端序(Big Endian)
大端字节序(Big Endian)是一种计算机存储多字节数据的方式,其中数据的高位字节存储在低地址内存中,而低位字节存储在高地址内存中。
在网络传输中,通常使用大端字节序,也称为网络字节序。
这是TCP/IP协议的规定,多字节数据在网络上传输时使用大端字节序。
因此,如果本地系统使用的是小端字节序,就需要在传输之前将其转换为大端字节序
避免异常:
在写入数据时,如果缓冲区已满,会抛出BufferOverflowException异常。
可以通过检查remaining()方法来避免这种情况。
在读取数据时,如果缓冲区中没有足够的数据,会抛出BufferUnderflowException异常。
可以通过检查hasRemaining()方法来避免这种情况。
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put((byte) 10); // 写入一个字节
buffer.flip(); // 切换到读模式
byte b = buffer.get(); // 读取一个字节
高级用法:
使用mark()和reset()方法可以标记和重置缓冲区的位置。
使用clear()方法可以清空缓冲区,使其可以重新使用。
ByteBuffer buf = ByteBuffer.allocate(4);
// java.nio.HeapByteBuffer[pos=0 lim=4 cap=4]
System.out.println(buf.toString());
// 写入整数9 ,1个整数4个字节
buf.putInt(9);
// java.nio.HeapByteBuffer[pos=4 lim=4 cap=4]
System.out.println(buf.toString());
// [0, 0, 0, 9]
System.out.println(Arrays.toString(buf.array()));
// 切换到读模式
buf.flip();
// java.nio.HeapByteBuffer[pos=0 lim=4 cap=4]
System.out.println(buf.toString());
// 读取并输出整数
int value = buf.getInt();
System.out.println("intValue=" + value);
// java.nio.HeapByteBuffer[pos=4 lim=4 cap=4]
System.out.println(buf.toString());
上一篇
下一篇
java AIO echo server
smart-http 1.6.1 实例
java NIO ByteBuffer 读写整数
smartsocket 整数读写实例
MQTT 特性简介
20240930 A股刷新多项历史记录