Java ByteBuffer详解

简介

在Java中,ByteBuffer是一个非常重要的类,它提供了一种方便的方式来处理二进制数据。ByteBuffer类在Java NIO中定义,是一个字节缓冲区,可以用于读取和写入二进制数据。它是一个抽象类,可以通过静态方法allocate()来创建实例。ByteBuffer有两种模式:读模式和写模式。在读模式下,可以从缓冲区中读取数据;在写模式下,可以向缓冲区中写入数据。

ByteBuffer的基本用法

创建ByteBuffer实例

要创建一个ByteBuffer实例,可以使用静态方法allocate()。这个方法接受一个int类型的参数,用于指定缓冲区的大小。下面的代码演示了如何创建一个大小为10的ByteBuffer实例:

ByteBuffer buffer = ByteBuffer.allocate(10);

除了allocate()方法,还可以使用wrap()方法来创建ByteBuffer实例。这个方法接受一个byte数组作为参数,并返回一个新的ByteBuffer实例,这个实例的底层数据就是传入的byte数组。下面的代码演示了如何使用wrap()方法创建ByteBuffer实例:

byte[] array = new byte[10];
ByteBuffer buffer = ByteBuffer.wrap(array);

写入数据

写入数据是ByteBuffer的一个重要功能。ByteBuffer提供了多个put()方法,用于向缓冲区中写入数据。下面是一些常用的put()方法:

方法名 描述
put(byte b) 向缓冲区中写入一个字节
put(byte[] array) 向缓冲区中写入一个byte数组
put(ByteBuffer src) 将一个ByteBuffer的数据写入到当前缓冲区
putChar(char value) 向缓冲区中写入一个char类型的值
putDouble(double value) 向缓冲区中写入一个double类型的值
putFloat(float value) 向缓冲区中写入一个float类型的值
putInt(int value) 向缓冲区中写入一个int类型的值
putLong(long value) 向缓冲区中写入一个long类型的值
putShort(short value) 向缓冲区中写入一个short类型的值

下面的代码演示了如何向ByteBuffer中写入数据:

ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 1);
buffer.putChar('A');
buffer.putInt(100);
buffer.putDouble(3.14);

读取数据

读取数据是ByteBuffer另一个重要的功能。ByteBuffer提供了多个get()方法,用于从缓冲区中读取数据。下面是一些常用的get()方法:

方法名 描述
get() 从缓冲区中读取一个字节
get(byte[] dst) 从缓冲区中读取数据到一个byte数组
getChar() 从缓冲区中读取一个char类型的值
getDouble() 从缓冲区中读取一个double类型的值
getFloat() 从缓冲区中读取一个float类型的值
getInt() 从缓冲区中读取一个int类型的值
getLong() 从缓冲区中读取一个long类型的值
getShort() 从缓冲区中读取一个short类型的值

下面的代码演示了如何从ByteBuffer中读取数据:

ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 1);
buffer.putChar('A');
buffer.putInt(100);
buffer.putDouble(3.14);

buffer.flip();

byte b = buffer.get();
char c = buffer.getChar();
int i = buffer.getInt();
double d = buffer.getDouble();

缓冲区模式切换

ByteBuffer有两种模式:读模式和写模式。默认情况下,ByteBuffer处于写模式。在写模式下,可以向缓冲区中写入数据;在读模式下,可以从缓冲区中读取数据。可以通过调用flip()方法来切换缓冲区的模式