Java NIO 缓冲区

2025 年 3 月 22 日 | 阅读需 2 分钟

缓冲区定义在 java.nio 包内。它定义了所有缓冲区共有的核心功能:limit(界限)、capacity(容量)和 current position(当前位置)。

Java NIO 缓冲区用于与 NIO 通道交互。它是我们可以写入数据并随后可以再次读取的内存块。内存块被包装在一个 NIO 缓冲区对象中,该对象提供了更简单的方法来处理内存块。

缓冲区类型

对于每种原始类型都有一个对应的缓冲区类型,并且所有缓冲区类都可以实现缓冲区接口。最常用的缓冲区类型是 ByteBuffer。

Java NIO 中使用的核心缓冲区如下:

  • CharBuffer
  • DoubleBuffer
  • IntBuffer
  • LongBuffer
  • ByteBuffer
  • ShortBuffer
  • FloatBuffer

上述缓冲区涵盖了我们可以通过 I/O 发送的基本数据类型:字符、双精度、整数、长整型、字节、短整型和浮点型。

在 NIO 中,数据传输通过使用 java.nio.Buffer 类实现的缓冲区进行。它类似于数组,并具有固定容量。

Java Nio Tutorial10

分配缓冲区

要获取一个缓冲区对象,我们必须先分配一个缓冲区。每个 Buffer 类都有一个 allocate() 方法用于分配缓冲区。

让我们看一个分配 ByteBuffer 的示例,其容量为 28 字节。

让我们看一个分配 CharBuffer 的示例,其空间可容纳 2048 个字符。


从缓冲区读取数据

有两种方法可以从缓冲区读取数据:

  1. 使用其中一个 get() 方法从 Buffer 中读取数据。
  2. 将数据从 Buffer 读取到 Channel 中。

让我们看一个使用 get() 方法读取 Buffer 中数据的示例。

让我们看一个将数据从 Buffer 读取到 Channel 中的示例。


向缓冲区写入数据

有两种方法可以向缓冲区写入数据:

  1. 使用其中一个 put() 方法将数据写入 Buffer
  2. 将数据从 Channel 写入 Buffer

基本缓冲区示例

让我们看一个使用 BufferedReadertestout.txt 文件读取一行的简单示例:

输出

上面的程序读取 testout.txt 文件的第一行,然后将文件的第一行打印到控制台。