首页  

java NIO ByteBuffer 使用技巧     所属分类 nio 浏览量 38
初始化:
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股刷新多项历史记录