通俗编程——白话NIO之Buffer

本文深入介绍了Java NIO中的Buffer,包括Buffer的概念、读写模式、capacity、position和limit的理解,以及创建、写入数据、flip转换、读取、重读、清空和标记位置等关键操作。通过示例详细解析了Buffer的工作流程。
摘要由CSDN通过智能技术生成

Buffer简介

Buffer意为缓冲区,其本质上就是是一块可写入数据,然后可以从中读取数据的内存区域,通过该种方式有助于减少系统开销和提高外设效率。对于缓冲区我们早有所了解,比如在C中标准I/O中的read,write直接调用系统的输入输出,而scanf和printf则借助缓冲区在适当的时候调用read,write操作。在NIO中,为了方便对缓冲区的操作,jAVA设计者将缓冲区封装为Buffer(实际上就是封装了基本数据元素的数组),并提供相应的方法对其操作。

在开始之前,首先需要明白以下几个概念:

  • 读模式和写模式
  • Buffer的capacity
  • Buffer的position
  • Buffer的limit

读模式和写模式

对于一块内存区而言,将数据写入该区域的过程称之为写模式。反之,称之为读模式。

capacity

该内存的大小即数组的的容量称为Buffer的capacity。一旦Buffer满了,你需要将其清空才能继续写入数据。

position

Buffer当前游标的位置称为position。在写模式下position表示当前的位置。初始的position值为0.当一个byte、long等数据写到Buffer后,position会向前移动到下一个可插入数据的Buffer单元。position最大可为capacity – 1。当将Buffer从写模式切换到读模式,position会先被重置为0,然后当从Buffer的position处读取数据时,position向前移动到下一个可读的位置。

limit

在写模式下,Buffer的limit表示你最多能往Buffer里写多少数据。写模式下,limit等于Buffer的capacity。当切换Buffer到读模式时,limit表示你最多能读到多少数据。因此,当切换Buffer到读模式时,limit会被设置成写模式下的position值。换句话说,你能读到之前写入的所有数据(limit被设置成已写数据的数量,这个值在写模式下就是position)

我们用一张图来大体的概括:
这里写图片描述


Buffer使用

Buffer的使用过程大体遵循以下步骤:
分配缓存大小——>写数据到Buffer——>调用其filp()——>从Buffer读取数据——>调用clear()或者compact()。
当向buffer写入数据时,buffer会记录下写了多少数据。一旦要读取数据,需要通过flip()方法将Buffer从写模式切换到读模式。在读模式下,可以读取之前写入到buffer的所有数据。一旦读完了所有的数据,就需要清空缓冲区,让它可以再次被写入。

1. 创建Buffer

通过allocate()或者通过wrap()方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值