Java高并发教程:详解NIO Buffer类及其属性

Java高并发教程:详解NIO Buffer类及其属性

NIO Buffer

NIO的Buffer(缓存区) 本质上是一个内存块,既可以写入数据,也可以从中读取数据。NIO的Buffer类,是一个抽象类,位于java.nio包中,其内部是一个内存块(数组)。

需要强调的是:Buffer类是一个非线程安全类。

Buffer类

Buffer类一个抽象类,对应于Java中主要数据类型,再NIO中有8种缓存区类:

Java高并发教程:详解NIO Buffer类及其属性

Buffer的使用步骤

  1. 使用创建子类实例对象的 allocate()方法,创建一个Buffer类的实例对象
  2. 调用put方法,将数据写入到缓冲区中
  3. 写入完成后,在开始读取数据前, 调用Buffer.flip()方法,将缓冲区转换为读模式
  4. 调用get方法,从缓冲区中读取数据
  5. 读取完成后, 调用Buffer.clear() 或Buffer.compact()方法,将缓冲区转换为写入模式

代码如下:

java;gutter:true;
public void buffer() {
//[1] 创建Buffer实例对象
IntBuffer intBuffer = IntBuffer.allocate(10);
//[2] 缓存区默认为写模式,将数据写入缓存区
intBuffer.put(1);
intBuffer.put(2);
intBuffer.put(3);
//[3] 将缓存区转换为读模式
intBuffer.flip();
//从缓存区读取数据
System.out.println(intBuffer.get());
System.out.println(intBuffer.get());
System.out.println(intBuffer.get());
//[4] 将缓存区换为写模式
// intBuffer.clear(); Or intBuffer.compact();
//[5] 倒带,即从头来一次!
intBuffer.rewind();
System.out.println(intBuffer.get());
//[6] Mark和Reset
intBuffer.mark();
System.out.println(intBuffer.get());
intBuffer.reset();
System.out.println(intBuffer.get());
}

参考资料

  • 《Netty、Redis、Zookeeper高并发实战》

Original: https://www.cnblogs.com/MrSaver/p/13130772.html
Author: 子烁爱学习
Title: Java高并发教程:详解NIO Buffer类及其属性

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/538100/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java lambda date排序

    使用lambda表达式,使用对象的时间字段将list排序。 不多说,直接上代码, Demo对象: 测试list: lambda排序: v 源码地址 Original: https:…

    Java 2023年6月8日
    0191
  • springboot引入jquery | idea显示引入jquery并且可以访问这个地址,但是浏览器显示$未定义

    idea项目引入jquery资源,和前端项目引入jquery资源一样,如果出问题的话那就是路径的问题。 Original: https://www.cnblogs.com/Litt…

    Java 2023年6月5日
    066
  • LeetCode剑指Offer刷题总结(三)

    合并两个排序链表25 本题思路非常简单,两个链表元素依次比较,压入新链表即可,但有易错点。 public ListNode mergeTwoLists(ListNode l1, L…

    Java 2023年6月7日
    095
  • 大顶堆的实现(基于数组存储的完全二叉树)

    完全二叉树 完全二叉树的定义 满二叉树非完全二叉树,非满二叉树完全二叉树 完全二叉树的特点 叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。 完全二叉树的实现 …

    Java 2023年6月13日
    074
  • MCU软件最佳实践——独立按键

    短小精悍,适用于有rtos和无rtos场合的按键驱动程序 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课。笔者翻阅了…

    Java 2023年6月6日
    0126
  • 【设计】springboot rabbitmq重试达到失败次数 进入死信队列

    代码示例: @Slf4j @Service @RabbitListener(queues = {"${spring.events.[event.product.produ…

    Java 2023年5月29日
    087
  • 订单及其状态机的设计实现

    状态机简介: 状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。 【规则的抽象】 有限状态机一般都有以下特点: (1)可以用状态来描述事物,并且任一时刻,事物…

    Java 2023年6月9日
    0182
  • Mybatis-Plus使用@TableField实现自动填充日期

    一、前言 我们在日常开发中经常使用ORM框架,比如Mybatis、tk.Mybatis、Mybatis-Plus。不过最广泛的还是Mybatis-Plus,我们的一些表,都会有创建…

    Java 2023年6月15日
    089
  • fastposter v2.9.2 最简海报生成器

    fastposter v2.9.2 程序员必备海报生成器 🔥🔥🔥 fastposter海报生成器是一款快速开发海报的工具。只需上传一张背景图,在对应的位置放上组件( &#x…

    Java 2023年6月5日
    083
  • 【Unity Shader学习笔记】Unity透明效果-透明度测试与透明度混合

    1、基本概念 1.1、基本概念 在实时渲染中实现透明效果,需要在渲染模型时控制它的透明通道(Alpha Channel)。 透明度为1代表该像素是完全不透明的;0代表完全透明。 U…

    Java 2023年6月9日
    081
  • 面试题目:手写一个LRU算法实现

    LFU Least Frequently Used 算法根据数据的历史访问频率来淘汰数据,其核⼼思想是”如果数据过去被访问多次,那么将来被访问的频率也更⾼”…

    Java 2023年6月5日
    081
  • 使用 sed 处理文本文件

    sed 是一款 GNU 流编辑器,可以按照指定的规则去处理文本文件或流,其强大的功能使用户在命令中快捷地修改文本文件成为可能。 它不会修改文件,除非使用shell重定向来保存结果。…

    Java 2023年6月7日
    0114
  • 识别 UTF-8 编码

    思路:如果GBK中文字节流我们使用 UTF-8 编码,会出现未知字符�,字节代表数字为 -65, -67。所以先尝试用 utf-8 编码,然后获取字节流,判断其中是否存在未知字符。…

    Java 2023年6月9日
    0108
  • day42-反射01

    Java反射01 1.反射(reflection)机制 1.1反射机制问题 一个需求引出反射 请看下面问题: 根据配置文件 re.properties 指定信息,创建Cat对象并调…

    Java 2023年6月15日
    090
  • springBoot项目不重新上传jar包,增量升级步骤

    1.把源jar包cp到一个空文件夹里,然后把该jar包解压 4.重新打包 5.把打好的jar包cp到启动目录,启动就ok Original: https://www.cnblogs…

    Java 2023年5月30日
    081
  • 集合笔记记录

    基础概念 Collection 是一个接口,定义了一些集合的通用方法(不做记录,自己查表)。在 Collection 中存放的是单列数据,即非 (key, value) 对形式的数…

    Java 2023年6月7日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球