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)

大家都在看

  • 第一个微信小项目

    第一个好友分析: 我们需要用到wxpy这个库,这个库用到时会弹出一个二维码,这个二维码是通过扫码的方式登录微信,以获取信息 1 #导入模块 2 from wxpy import *…

    Java 2023年6月6日
    074
  • 「免费开源」基于Vue和Quasar的前端SPA项目crudapi零代码开发平台后台管理系统实战之元数据导出导入(十五)

    基于Vue和Quasar的前端SPA项目实战之元数据导出导入(十五) 回顾 通过前一篇文章基于Vue和Quasar的前端SPA项目实战之模块管理(十四)的介绍,通过模块管理将具有相…

    Java 2023年6月6日
    0106
  • Scalable IO in Java

    https://github.com/gotodsp/Scalable-IO Original: https://www.cnblogs.com/gotodsp/p/1428903…

    Java 2023年5月29日
    077
  • 排序算法-冒泡排序

    一、基本思想 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没…

    Java 2023年6月5日
    0132
  • 船舱订票系统测试

    package com.dong.mytest.demo.other.yan; import java.util.ArrayList; import java.util.HashM…

    Java 2023年6月5日
    088
  • DDD从入门到精通:基础篇

    这篇文章主要还是表述清楚DDD相关的基础概念,因为DDD入门有一定的专业名词,还是得有个基本的了解。 先讲解下领域模型作用: 对软件需求进行设计,维持其内在逻辑的一致性 1)划分边…

    Java 2023年6月15日
    0102
  • 数据库与数据库软件的安装

    1.先把SplServer解压 2.解压后出来Evaluation_CHS 3.点进去,然后点SETUP 4.点击安装,然后点击全新SQL 5.选择Developer版本 6.数据…

    Java 2023年6月8日
    061
  • 无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口

    无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口 回顾 通过之前一篇文章的介绍,采用抽象工厂设计模式,已经支持了大象数据库PostgreS…

    Java 2023年6月6日
    089
  • Windows下安装MySQL

    Windows下安装MySQL 安装包下载 官网下载地址https://dev.mysql.com/downloads/mysql/ 点击下载之后会跳转界面 可以不选择注册或登录账…

    Java 2023年6月8日
    093
  • Html转换PDF(Java实用版)

    前言: 在工作当中,遇到了需要把HTML页面转化为PDF文档,有很多中实现,如下进行一个对比,大家个借鉴去进行使用 各实现对比表 于Windows平台进行测试: 此博客仅基于ITe…

    Java 2023年6月8日
    0134
  • SpringBoot文件上传

    java;gutter:true; Title</p> <pre><code> ;gutter:true;@RequestMapping(val…

    Java 2023年5月30日
    084
  • 面试必问之 CopyOnWriteArrayList,你了解多少?

    一、摘要 在介绍 CopyOnWriteArrayList 之前,我们一起先来看看如下方法执行结果,代码内容如下: public static void main(String[]…

    Java 2023年6月9日
    094
  • day03_1_idea教程

    idea使用教程 一、idea相关概念介绍 1.1 IDE概念介绍 集成开发环境(IDE,Integrated Development Environment)是用于提供程序开发环…

    Java 2023年6月8日
    065
  • 好玩Python——PIL项目实训(二)

    1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sun Apr 12 22:03:26 2020 4 5 @…

    Java 2023年6月6日
    0112
  • JavaWeb作用域

    JavaWeb作用域 综述 javaweb有四个不同级别的作用域,分别是page页面级别、一次请求级别、一次会话级别、整个web级别。page没有进行实现 请求级别 只对一次req…

    Java 2023年6月8日
    084
  • Spring Boot 入门(九)使用RabbitMQ

    maven <dependency> <groupId>org.springframework.bootgroupId> <artifactId…

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