Java NIO 关键概念之 Buffer

本文介绍了Java NIO的Buffer概念,包括其作为数据容器的角色、核心属性如capacity、limit和position的含义,以及如何通过Buffer进行数据读写。通过示例代码展示了Buffer的基本使用,并对关键方法进行了源码分析,揭示了Buffer在数据操作中的灵活性和高效性。此外,文章还讨论了Buffer的大小比较和不足之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

Java NIO 的三大关键概念之一是 Buffer,在一些文章/源代码中,我们也经常会看到 Buffer 相关的信息。Buffer 到底是什么,Buffer 的基本使用方法是什么,这是本文主要要说的。

二、Buffer 的基本概念

Buffer自 JDK1.4 引入,是一个抽象类,在java.nio包下,定义了一些通用的方法,并不能直接创建对象,在使用时,需要通过其具体的基础数据类型子类来创建对象。Java 的基础数据类型中,除了boolean外,都有一个对应数据类型的子类,如 ByteBuffer、IntBuffer 等。

通俗点说,Buffer 是 Java 基础数据类型的数据容器,本质上其实就是一个相应基础数据类型的数组封装,并扩展了相关的属性、操作方法等以方便使用。(实现缓存数据、方便高效地操作数据,后面会有示例/源码说明)

Buffer 中,有几个重要的属性/概念,简单说明如下:

简单来说,capacity 是 Buffer 对应的数组的容量值,limit 是读/写的限制值,position 是数组中相关元素位置的索引值,这三个值都不会为负数,且这几个值的大小关系如下:

mark <= position <= limit <= capacity

复制代码

Buffer 作为一个数据容器,操作一个 Buffer 的一般过程如下:

java.nio.Buffer类作为一个抽象基类,提供了一些基本方法,如capacity()limit()等,可以返回其私有属性值,也提供了flip()(读/写模式切换)、clear()(清空数据)等设置属性值的操作方法,且这些方法都是用final关键字修饰的,不可被重写

而要创建一个 Buffer 对象,则只能通过对应基础数据类型的子类中的allocate()方法来实现,同样,写数据、读数据,也需要调用相应子类中的相关put()get()方法来实现。

三、Buffer 的基本使用 &源码分析

基本使用

首先,通过一个例子演示下 Buffer 的基本使用:

import java.nio.ByteBuffer;/** * Java Buffer demo *  * 输出的byteBuffer对象中,可以看到读/写等相关方法操作后,position、limit、capacity值的的变化。 * * @author : laonong */public class ByteBufferMain {
      public static void main(String[] args) {
          //创建总容量为10的Buffer对象        ByteBuffer byteBuffer = ByteBuffer.allocate(10);        System.out.println("创建Buffer后:" + byteBuffer);        //写入4个节点元素数据        byteBuffer.put((byte) 'a');        byteBuffer.put((byte) 'b');        byteBuffer.put((byte) 'c');        byteBuffer.put((byte) 'd');        System.out.println("写入数据后:" + byteBuffer);        //读写转换        byteBuffer.flip();        System.out.println("flip()方法读写转换后:" + byteBuffer);        //读取Buffer中的所有元素数据        System.out.print("读取Buffer中的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值