如何在 Java 中写入和读取 ByteBuffer

简介: 【8月更文挑战第22天】

ByteBuffer 是 Java NIO(非阻塞 I/O)包中的一个重要类。它表示一个字节缓冲区,可以用来存储和操作二进制数据。ByteBuffer 提供了多种方法来写入和读取数据,包括:

写入 ByteBuffer

  • put() 方法:将单个字节写入 ByteBuffer。
  • put(byte[]) 方法:将字节数组写入 ByteBuffer。
  • put(ByteBuffer) 方法:将另一个 ByteBuffer 的内容写入当前 ByteBuffer。
  • putChar() 方法:将 char 值写入 ByteBuffer。
  • putInt() 方法:将 int 值写入 ByteBuffer。
  • putLong() 方法:将 long 值写入 ByteBuffer。
  • putFloat() 方法:将 float 值写入 ByteBuffer。
  • putDouble() 方法:将 double 值写入 ByteBuffer。

读取 ByteBuffer

  • get() 方法:读取单个字节。
  • get(byte[]) 方法:将数据读入字节数组。
  • get(ByteBuffer) 方法:将数据读入另一个 ByteBuffer。
  • getChar() 方法:读取 char 值。
  • getInt() 方法:读取 int 值。
  • getLong() 方法:读取 long 值。
  • getFloat() 方法:读取 float 值。
  • getDouble() 方法:读取 double 值。

示例:写入数据

以下示例演示如何使用 put() 方法向 ByteBuffer 写入数据:

ByteBuffer buffer = ByteBuffer.allocate(1024);

// 向缓冲区写入一些数据
buffer.put((byte) 1);
buffer.put((byte) 2);
buffer.put((byte) 3);

示例:读取数据

以下示例演示如何使用 get() 方法从 ByteBuffer 读取数据:

ByteBuffer buffer = ...; // 假设 buffer 已写入一些数据

// 重置缓冲区的 position 为 0,以便从头开始读取
buffer.rewind();

// 读取缓冲区中的数据
while (buffer.hasRemaining()) {
   
    byte b = buffer.get();
    System.out.println(b);
}

其他方法

除了 put()get() 方法之外,ByteBuffer 还提供其他方法来写入和读取数据,例如:

  • compact() 方法:将未读数据移动到缓冲区的开头,并丢弃所有已读数据。
  • flip() 方法:将缓冲区的 limit 设置为当前 position,并将 position 设置为 0,以便从头开始读取。
  • clear() 方法:将缓冲区的 position 和 limit 重置为 0,并清除所有标记。

结论

ByteBuffer 提供了多种方法来写入和读取数据。了解这些方法对于有效使用 Java NIO 至关重要。

目录
相关文章
|
3月前
|
存储 Java
如何在 Java 中创建 ByteBuffer
【8月更文挑战第22天】
59 0
|
Java Maven
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J [duplicate]
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J [duplicate]
|
存储 缓存 Java
|
Java 容器
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(下)
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!
155 0
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(下)
|
存储 Java API
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(上)
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!
142 0
JDK又在写Bug!告诉你为何Java NIO的ByteBuffer这么垃圾!(上)
|
Java
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(下)
NIO中的Buffer用于和NIO Channel交互。 数据是从Channel读入Buffer,从Buffer写入Channel。
205 0
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(下)
|
存储 Java API
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(上)
NIO中的Buffer用于和NIO Channel交互。 数据是从Channel读入Buffer,从Buffer写入Channel。
578 0
阿里P8大佬通宵整理!解锁Java NIO的ByteBuffer全部使用姿势!(上)
|
网络协议 Java
【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
186 0