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自动装配原理初识

    这篇文章主要介绍了springboot自动装配原理的相关资料,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下
    2021-04-04
  • java查找文件夹下最新生成的文件的方法

    java查找文件夹下最新生成的文件的方法

    在本篇文章中我们给大家分享了关于java怎么查找文件夹下最新生成的文件的相关方法和知识点,有需要的朋友们参考下。
    2019-07-07
  • 一文详解Java方法重载与递归应用

    一文详解Java方法重载与递归应用

    方法重载 允许在同一个类中定义多个具有相同名称的方法,但 参数列表 必须不同,递归 是一种让函数调用自身的技术,它提供了一种将复杂问题分解为简单问题的方法,这样更容易解决,本文详细介绍了Java方法重载与递归应用,需要的朋友可以参考下
    2024-02-02
  • Spring AOP拦截-三种方式实现自动代理详解

    Spring AOP拦截-三种方式实现自动代理详解

    这篇文章主要介绍了Spring AOP拦截-三种方式实现自动代理详解,还是比较不错的,这里分享给大家,供需要的朋友参考。
    2017-11-11
  • Spring boot项目打包成jar运行的二种方法

    Spring boot项目打包成jar运行的二种方法

    这篇文章主要给大家介绍了关于Spring boot项目打包成jar运行的二种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • SpringBoot 项目中的图片处理策略之本地存储与路径映射

    SpringBoot 项目中的图片处理策略之本地存储与路径映射

    在SpringBoot项目中,静态资源存放在static目录下,使得前端可以通过URL来访问这些资源,我们就需要将文件系统的文件路径与URL建立一个映射关系,把文件系统中的文件当成我们的静态资源即可,本文给大家介绍SpringBoot本地存储与路径映射的相关知识,感兴趣的朋友一起看看吧
    2023-12-12
  • 一篇文章教你使用SpringBoot如何实现定时任务

    一篇文章教你使用SpringBoot如何实现定时任务

    这篇文章主要给大家介绍了关于如何利用一篇文章教你使用SpringBoot实现定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Mybatis-plus apply函数使用场景分析

    Mybatis-plus apply函数使用场景分析

    Mybatis-plus 里面的 apply方法 是用于拼接自定义的条件判断,自定义时间查询,根据传进来的开始日期,查询所有该日期是数据,但是数据库中保存是时间,所以需要使用apply查询方式并格式化,这篇文章给大家介绍Mybatis-plus apply函数使用,感兴趣的朋友一起看看吧
    2024-02-02
  • 详解Java设计模式之桥接模式

    详解Java设计模式之桥接模式

    桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
    2022-10-10
  • Java程序去调用并执行shell脚本及问题总结(推荐)

    Java程序去调用并执行shell脚本及问题总结(推荐)

    这篇文章主要介绍了Java程序去调用并执行shell脚本及问题总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论