Java NIO ByteBuffer 使用

介绍

Java NIO(New Input/Output)是Java 1.4版本引入的一组用于替代传统IO API的新IO API。其中,ByteBuffer是NIO中的一个重要类,用于在内存中存储和操作数据。本文将介绍Java NIO的ByteBuffer类的使用。

ByteBuffer 概述

ByteBuffer是一个字节缓冲区,可以用于读取和写入字节数据。它是一个抽象类,有多个具体实现类,其中最常用的是ByteBuffer类。ByteBuffer提供了一系列的方法来读取和写入数据,它可以在内存中存储字节数据,并提供了一套API来操作这些数据。

创建 ByteBuffer

可以通过以下方式创建一个ByteBuffer对象:

ByteBuffer buffer = ByteBuffer.allocate(1024);

上述代码创建了一个容量为1024字节的ByteBuffer对象。也可以通过 wrap() 方法来创建一个ByteBuffer对象:

byte[] byteArray = new byte[1024];
ByteBuffer buffer = ByteBuffer.wrap(byteArray);

写入数据

可以使用 put() 方法向ByteBuffer中写入数据。下面是一个示例,演示如何向ByteBuffer写入数据:

buffer.put((byte) 1);
buffer.putShort((short) 2);
buffer.putInt(3);
buffer.putLong(4L);
buffer.putFloat(5.0f);
buffer.putDouble(6.0);
buffer.putChar('a');
buffer.put("hello".getBytes());

读取数据

可以使用 get() 方法从ByteBuffer中读取数据。下面是一个示例,演示如何从ByteBuffer中读取数据:

byte b = buffer.get();
short s = buffer.getShort();
int i = buffer.getInt();
long l = buffer.getLong();
float f = buffer.getFloat();
double d = buffer.getDouble();
char c = buffer.getChar();

byte[] byteArray = new byte[buffer.remaining()];
buffer.get(byteArray);
String str = new String(byteArray);

在读取数据时,需要注意ByteBuffer的位置(position)和限制(limit)。position表示当前读/写的位置,limit表示可以读/写的最大位置。在读取数据之前,需要将position设置为正确的位置。可以使用 flip() 方法实现position和limit的切换。

示例

下面是一个完整的示例,演示如何使用ByteBuffer读取和写入数据:

ByteBuffer buffer = ByteBuffer.allocate(1024);

// 写入数据
buffer.put((byte) 1);
buffer.putShort((short) 2);
buffer.putInt(3);
buffer.putLong(4L);
buffer.putFloat(5.0f);
buffer.putDouble(6.0);
buffer.putChar('a');
buffer.put("hello".getBytes());

// 切换到读模式
buffer.flip();

// 读取数据
byte b = buffer.get();
short s = buffer.getShort();
int i = buffer.getInt();
long l = buffer.getLong();
float f = buffer.getFloat();
double d = buffer.getDouble();
char c = buffer.getChar();

byte[] byteArray = new byte[buffer.remaining()];
buffer.get(byteArray);
String str = new String(byteArray);

序列图

下面是一个使用ByteBuffer读取和写入数据的示例的序列图:

sequenceDiagram
    participant Client
    participant Server
    Client->>Server: 写入数据
    Server->>Server: 读取数据
    Server->>Client: 返回数据

总结

本文介绍了Java NIO中的ByteBuffer类的使用。可以使用ByteBuffer类来读取和写入字节数据。通过示例代码,说明了如何创建ByteBuffer对象、向其中写入数据以及从中读取数据。同时,通过序列图展示了读取和写入数据的过程。