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的资料请关注脚本之家其它相关文章!

相关文章

  • springMVC配置环境实现文件上传和下载

    springMVC配置环境实现文件上传和下载

    这篇文章主要为大家详细介绍了springMVC配置环境实现文件上传和下载的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Java excel数据导入mysql的实现示例详解

    Java excel数据导入mysql的实现示例详解

    今天教大家如何使用Java将excel数据导入MySQL,文中有非常详细的代码示例,对正在学习java的小伙伴呢很有帮助,需要的朋友可以参考下
    2022-08-08
  • 必须掌握的十个Lambda表达式简化代码提高生产力

    必须掌握的十个Lambda表达式简化代码提高生产力

    这篇文章主要为大家介绍了必须掌握的十个Lambda表达式来简化代码提高生产力,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Java 详解Collection集合之ArrayList和HashSet

    Java 详解Collection集合之ArrayList和HashSet

    本章具体介绍了ArrayList和HashSet两种集合的基本使用方法和区别,图解穿插代码实现。 JAVA成仙路从基础开始讲,后续会讲到JAVA高级,中间会穿插面试题和项目实战,希望能给大家带来帮助
    2022-03-03
  • 快速排序的深入详解以及java实现

    快速排序的深入详解以及java实现

    本篇文章是对java中的快速排序进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 如何解决@value获取不到yaml数组的问题

    如何解决@value获取不到yaml数组的问题

    文章介绍了在使用YAML配置文件时,通过@Value注解获取整数和数组列表的配置方法,并提供了两种解决方案:一种适用于非嵌套列表,另一种适用于嵌套列表等复杂配置
    2024-11-11
  • 解决mybatis批量更新出现SQL报错问题

    解决mybatis批量更新出现SQL报错问题

    这篇文章主要介绍了mybatis批量更新出现SQL报错,解决办法也很简单只需要在application.properties配置文中的数据源url后面添加一个参数,需要的朋友可以参考下
    2022-02-02
  • SpringBoot集成MinIO的示例代码

    SpringBoot集成MinIO的示例代码

    对象存储服务OSS是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件,这篇文章主要介绍了SpringBoot集成MinIO的示例代码,需要的朋友可以参考下
    2023-06-06
  • Java注解Annotation原理及自定义注解代码实例

    Java注解Annotation原理及自定义注解代码实例

    这篇文章主要介绍了Java注解Annotation原理及自定义注解代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Spring Web MVC框架学习之配置Spring Web MVC

    Spring Web MVC框架学习之配置Spring Web MVC

    这一篇文章讲的是Spring Web MVC各部分的配置方法,包括Java代码配置和XML文件配置以及MVC命名空间的使用方法。
    2017-03-03

最新评论