讲一讲缓冲区 Buffer

举报
程序员小假 发表于 2025/06/29 10:11:06 2025/06/29
【摘要】 1、缓冲区(Buffer)的数据存取一个用于特定基本数据类型的容器。由java.nio包定义,所有缓冲区都是Buffer抽象类的子类。Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。 A.缓冲区(Buffer)在Java NIO中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据 B.缓冲区的类型根据数据类型不同(boole...

1、缓冲区(Buffer)的数据存取

一个用于特定基本数据类型的容器。由java.nio包定义,所有缓冲区都是Buffer抽象类的子类。
Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。 

A.缓冲区(Buffer)

在Java NIO中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据 

B.缓冲区的类型

根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:

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

上述缓冲区的管理方式几乎一致,通过allocate()获取缓冲区 

C.缓冲区存取数据的两个核心方法

  • put():存入数据到缓冲区中
  • get():获取缓冲区中的数据 

    D.缓冲区的四个核心属性

  • capacity:容量,表示缓冲区中最大存储数据的容量。一旦声明不能改变

  • limit:界限,表示缓冲区中可以操作数据的大小。(limit后数据不能进行读写)
  • position:位置,表示缓冲区正在操作数据的位置
  • mark:标记,表示当前position的位置。可以通过reset() 恢复到mark的位置
  • 0 <= mark <= position <= limit <= capacity 

    2、直接缓冲区和非直接缓冲区

  • 非直接缓冲区:通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存中

  • 直接缓冲区:通过allocateDirect()方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。