Java NIO缓冲区Buffer基础教程示例

 更新时间:2023年10月27日 10:36:18   作者:lane  
这篇文章主要介绍了Java NIO缓冲区Buffer基础教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

概念

缓冲区(Buffer)本质上是管理着基本元数对象的数组

Buffer家族

Buffer基本属性

/** Invariants: mark <= position <= limit <= capacity */

//用来临时标记position的位置,便于还原
private int mark = -1;
//即将读取或写入的开始位置
private int position = 0;
//上界,缓冲区现有元素的数量
private int limit;
//缓存区的最大容量,初始化时设定,不能改变
private int capacity;

Buffer基本API

package java.nio;
public abstract class Buffer {
    //获取缓冲区容量
    public final int capacity()
    //获取当前位置
    public final int position()
    //设置一个新的position
    public final Buffer position(int newPosition)
    //获取上界位置
    public final int limit()
    //设置一个新的上界位置,但是不能小于0或超过capacity
    public final Buffer limit(int newLimit)
    //标记当前position
    public final Buffer mark()
    //恢复标记的position
    public final Buffer reset()
    //重新设置mark=-1 position=0 limit=capacity,读取完数据调用,数据没有被清理,写入的数据会覆盖之前的数据
    public final Buffer clear()
    //翻转缓冲区,使写入的数据进入可读状态
    public final Buffer flip()
    //重置读写位置,将position设为0,mark设为-1丢弃
    public final Buffer rewind()
    //获取当前位置好缓冲区上界Limit还有多少元素
    public final int remaining()
    //判断position是否已经达到limit上界,用于判断是否已经全部读取完毕
    public final boolean hasRemaining()
    //判断当前缓冲区是否是只读的
    public abstract boolean isReadOnly();
}

填充Hello后的缓冲区

ByteBuffer buffer=ByteBuffer.allocate(10);
buffer.put((byte)'H').put((byte)'e').put((byte)'l').put((byte)'l').put((byte)'o');

调用flip翻转后的缓冲区

buffer.flip();

直接缓冲区直接缓冲区是指java虚拟机堆栈外的系统存储区,通常情况通道之间的缓冲区数据传输不能直接使用非直接缓冲区,而是会创建临时直接缓冲区来复制数据后传输,这样导致性能损耗。如果是高并发情况下重复使用缓冲区,使用直接缓冲区可以提高IO性能。但是创建直接缓冲区需要绕过JVM直接操作本地系统,这样的创建和销毁动作需要更高的成本。

缓冲区的创建方式

以ByteBuffer为例

//创建一个直接缓冲区
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
//创建一个间接缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);
//创建一个只读的备份缓冲区
byte[] bytes = "hello".getBytes();
ByteBuffer buffer = ByteBuffer.wrap(bytes);

以上就是Java NIO缓冲区Buffer基础教程示例的详细内容,更多关于Java NIO缓冲区Buffer的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot获取浏览器信息的多种实现方式

    SpringBoot获取浏览器信息的多种实现方式

    在Web开发中,获取用户浏览器信息是常见需求,可用于统计分析、个性化展示、安全防护等场景,SpringBoot提供了多种方式来获取这些信息,下面是详细实现方法,需要的朋友可以参考下
    2025-10-10
  • SpringBoot Event 事件如何实现异步延迟执行

    SpringBoot Event 事件如何实现异步延迟执行

    这篇文章主要介绍了Spring Boot Event 事件如何实现异步延迟执行问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Spring之@Qualifier注解的具体使用

    Spring之@Qualifier注解的具体使用

    本文主要介绍了Spring之@Qualifier注解的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • 解决找不到符号 符号:变量 log问题

    解决找不到符号 符号:变量 log问题

    这篇文章主要介绍了解决找不到符号 符号: 变量 log问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Spring Boot自定义配置属性源(PropertySource)

    Spring Boot自定义配置属性源(PropertySource)

    这篇文章主要介绍了Spring Boot自定义配置属性源(PropertySource),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Java中的装箱和拆箱深入理解

    Java中的装箱和拆箱深入理解

    装箱和拆箱是java中老生常谈的问题,下面小编通过本文给大家介绍java装箱和拆箱最基本的东西,感兴趣的朋友一起看下吧
    2016-07-07
  • 浅谈java实现redis的发布订阅(简单易懂)

    浅谈java实现redis的发布订阅(简单易懂)

    本篇文章主要介绍了浅谈java实现 redis的发布订阅(简单易懂),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 一文给你通俗易懂的讲解Java异常

    一文给你通俗易懂的讲解Java异常

    这篇文章主要给大家介绍了关于Java异常的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • spring boot jar的启动原理解析

    spring boot jar的启动原理解析

    这篇文章主要介绍了 spring boot jar的启动原理分析,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Spring Bean常用的的装配方式详解

    Spring Bean常用的的装配方式详解

    这篇文章主要介绍了Spring Bean常用的的装配方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论