java nio之buffer的分析

《Java源码分析》:Java NIO 之 Buffer 《Java源码分析》:Java NIO 之 Buffer在上篇博文中,我们介绍了Java NIO 中Channel 和Buffer的基本使用方法,这篇博文将从源码的角度来看下Buffer的内部实现。在Java API文档中,对Buffer的说明摘入如下:Buffer:是一个用于特定基本数据类型的容器。这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型。缓冲区是特定基本数据类型元素 阅读详情

在java nio中,与数据打交道是通过channel与buffer进行的。。。

其实buffer的定义在I/O操作中还是蛮平常的,起码在nginx和libevent中都有自己定义buffer,只不过nginx的定义可能更复杂一些,libevent就相对简单一些吧。。。


其实在java nio中buffer的定义也还蛮简单的吧。。。。

有三个重要的属性:

(1)limit

(2)position

(3)capacity

另外有两个重要的方法:

(1)clear

(2)flip


capacity的意义应该比较容易理解吧,而且它在创建的时候就已经定下来了,就是当前buffer所能容纳的最大容量。。

首先来讲clear方法吧:

clear方法可以理解为复位buffer吧,特别是当我们要向buffer中写数据的时候。。。当调用clear方法的时候,capacity的值不会变,依然指向buffer的末尾,limit的值与capacity相同,position则指向了buffer的开头了。。。

这个时候写数据,每写入一个单位,position位置向前移一位,直到到了limit的位置就代表已经写满了。。。


flip则是当我们刚开始已经向buffer中写了数据,然后要将数据读取出来之前需要调用的方法。调用了flip方法之后,capacity依然没有变,还是指向最大容量,但是这个时候limit指向了position的位置了,然后position则指向了buffer的开头。。。

这个时候读数据,每读出一个单位,position会向前移动一位,当移动到了limit的位置,就代表当前的buffer里面的数据都已经读完了。。。。


好了,好像buffer就差不多了。。好简单。。当然还有一些其他的方法,看名字基本就能明白是什么意思了吧。。。

VideoPose3D | 环境搭建 文章目录环境要求下载PyTorch基本步骤验证安装问题修复数据集设置Human3.6MCPN detections配置wget命令安装CPN评估环境测试问题测试报错 无法识别参数3 3 3 3卡在最后评估 主要参考:GitHub / facebookresearch / VideoPose3D 环境要求 Dependencies Make sure you have the followin... 阅读详情

相关推荐

海光(hygon)CPU ESXI vSphere 紫屏问题修复记录

海光服务器ESXI 紫屏问题修复

edison202302的博客 3549

Java NIO(Buffer)

Java NIO(Buffer)3.1 Buffer简介3.2 Buffer的基本使用3.2.1 使用Buffer读写数据,一般遵循以下四个步骤3.2.2 使用buffer的例子3.3 Buffer的capacity、position和limit 3.1 Buffer简介 Java NIO中的Buffer用于和NIO通道进行交互。数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用于方便

二进制杯莫停的博客 1303

Hermes Agent vs OpenClaw:2026 年开源 AI Agent 框架深度对比

两款 2026 年最受关注的开源 AI Agent 框架,一个主打「自进化」,一个聚焦「网关路由」——它们究竟有何不同?本文将从架构原理、核心机制、使用方式到适用场景,为你全面拆解。无论你是 AI 研究者、开发者,还是想用 AI 提升工作效率的个人用户,这篇文章都将帮助你做出最适合的选择

程序猿_三产 3738

Java 入门指南:Java NIO —— Buffer(缓冲区)

在 NIO(New Input/Output)模型中,Buffer 是一个重要的概念,与数据打交道,用于在内存中存储数据。通过 Channel 将数据传输到 Buffer 缓冲区中,并在缓冲区内进行数据的读写操作。 Buffer 本质上是一个数组,可以存储多个相同类型的基本数据类型,如 byte、short、int、long、float、double 等。Buffer 封装了内部的数组,并提供了一些操作该数组的方法。

热带鱼的技术博客 2258

Cadence SpectreRF仿真避坑指南:PSS和Pnoise设置详解(附实战案例)

本文详细解析了Cadence SpectreRF中PSS(周期稳态分析)和Pnoise(周期噪声分析)的关键设置技巧,帮助模拟IC设计工程师避开常见仿真陷阱。通过实战案例分享,涵盖引擎选择、Beat Frequency计算、噪声类型配置等核心参数优化策略,提升仿真精度与效率。特别针对开关电容电路和振荡器等复杂场景提供专业解决方案。

weixin_42613501的博客 601

关于42步进电机驱动——基于STM32 HAL库实现

我找了好多资料,好多关于42步进电机的都是文档,这么文档都需要积分,需要积分就算了内容还非常差,浪费时间和电脑的内存。关于大部分是基于Arduino和51去驱动的 42步进电机驱动硬件如下: 首先你要了解步进电机的驱动原理,我也不啰嗦了,请看这边博客: 二相四线,四相五线,四相六线步进电机接线及驱动方法 , 看完这篇你就知道驱动和接线的原理了。 起初我也为如何接线烦恼,因为有些博客在讲述这些问题的时候没有讲的很透彻。 方法如下: ①用万用表调到欧姆档,用其中一个表笔搭在一个引脚上,依次测其它.

Jodan132的博客 1万+

【Java进阶】NIO(二)<Buffer>

Buffer缓冲区实际上就是一个数组,把数组的内容和信息包装成一个Buffer对象,它提供了一组访问这些信息的方法在NIO中关键的Buffer① ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer,这些Buffer覆盖了能够通过I/O发送的所有基本类型byte、char、double、float、int、long、short等② 实际上使用较多的是ByteBuffer、CharBuffer。

行为产生结果 1207

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 517

Java NIO中Buffer方法详解(含代码示例)

Java NIO(New IO)中的Buffer类是一个抽象类,用于在Java程序中进行数据的读取和写入操作。它提供了一组方法来操作底层数据容器,例如数组或ByteBuffer。下面是对Buffer类中常用方法的详细解释和代码示例。

一叶知秋 1379

YOLOv11改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、恶劣天气等问题

在一些特定情况下,目标检测任务由于多种因素的影响,变得更加复杂和困难。以下是几类常见的困难目标检测场景:1. 小目标检测定义:小目标检测是指当目标在图像中的占比非常小时,模型需要准确识别和定位这些目标。典型场景包括远程监控、卫星图像分析等。挑战1. 低分辨率:由于目标在图像中占据像素较少,细节缺失,特征提取难度增加。2. 特征不足:小目标缺乏明显的形状和纹理特征,容易被复杂背景淹没。3. 检测难度大:由于小目标与背景之间的对比度较低,误检的几率上升。4. 数据不平衡。

qq_64693987的博客 4万+

把 SAP Workflow 的 Task 搞懂:从 TS 到 WS 的建模、触发与排错全景

摘要:SAP Business Workflow中的Task是工作流设计的核心单元,分为single-step(独立执行)和multistep(流程编排)两种类型。Task设计直接影响流程的可复用性、扩展性和可排错性。系统将Task分为5类(TS/T/WS/WF/TG),运行时通过事件触发、Linkage匹配、Work Item执行的链路完成流程驱动。关键事务码包括PFTC_INS(创建Task)、SWE2(事件配置)等。正确设计Task边界并遵循"先业务提交后事件触发"原则,是构建稳定

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

Java-NIO篇章(2)——Buffer缓冲区详解

Buffer类是一个抽象类,对应于Java的主要数据类型,在NIO中有8种缓冲区类,分别如下: ByteBuffer、 CharBuffer、 DoubleBuffer、 FloatBuffer、 IntBuffer、 LongBuffer、 ShortBuffer、MappedByteBuffer。 本文以它的子类ByteBuffer类为例子讲解。ByteBuffer子类就拥有一个byte[]类型的数组成员final byte[] hb,作为自己的读写缓冲区,数组的元素类型与Buffer子类的操作类型相

Cheney的博客 2103

OceanBase数据迁移(OMS)深度解析:异构数据库迁移方案、核心原理与实战优化指南

OceanBase迁移服务(OMS)提供异构数据库间全量+增量数据迁移与实时同步能力,核心价值在于保障业务连续性、数据一致性和异构兼容性。其分层架构包含服务接入层、流程编排层和组件链路层,支持Oracle/MySQL/DB2等与OceanBase的数据交互。关键技术包括DBCat引擎处理结构转换、并行分片实现全量迁移、以及日志解析保障增量同步。OMS通过类型映射、批量提交和断点续传等优化手段,确保迁移过程高效可靠,典型应用于去O迁移、数据库升级等场景。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 847

java nio Buffer源码分析

目录 简介 字段mark,position,limit,capacity,address,构造函数 方法capacity,2个position,2个limit,mark,reset 方法flip,rewind,remaining,hasRemaining,isReadOnly 方法hasArray,array,arrayOffset,isDirect 方法2个nextGetIndex,2个nextPutIndex,2个checkIndex,markValue,truncate,discardMa

今天吃了吗的博客 333

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java.nio包的分析(一)--Buffer类

继上次草草的分析完Java.nio.current

走在前往架构师的路上 3977

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java NIO之缓冲区Buffer分析

目录 Buffer介绍 ByteBuffer介绍 ByteBuffer案例 总结 Buffer介绍 1.Buffer简介       缓冲区(Buffer)是中NIO中基础的内容,存在于包java.nio下面.一个Buffer对象可以看做是一个存储数据的容器,数据被存储到这里后可以进行检索。缓冲区工作与通道关联,我们不与通道直接进行交互,而是通过缓冲区将数据传送到通道里,或者从通道获...

梦悠哉的博客 1740

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java nio源码_Java NIO Buffer类源码分析

下面通过分析java nio的Buffer类的源代码来学习Buffer中的position、limit、capcity和marker几个标志位的变化。源代码分析如下:publicabstractclassBuffer{//变量的取值约束:mark<=position<=limit<=capacityprivateintmark=-1;//标记p...

weixin_42300090的博客 171

nio java 包_java.nio包的分析(一)--Buffer类

继上次草草的分析完Java.nio.current的分析,个人感觉还是收获非常大的。虽说不能理解全部,但是绝对比以前的感觉好很多。趁着这股热劲,最近开始研究Java.nio下的源码,Java.nio,也许 也是非常少的人听过吧,在Java的基础书里面一般也不会提及到的,我记得网上好像有2中说法,一种Nio为new I/O的简写还有一种是Nio为NonBoclk I/O的意思。非阻塞I/O。下面给...

weixin_35651070的博客 169

java.nio.Buffer分析

在研究Apache Mina源代码时,在IoFilter中使用IoBuffer做为数据缓冲对象,而IoBuffer的实现来自于java.nio.Buffer。Buffer中的flip()、clear()、reset()、mark()等概念让我有点糊涂,仔细看了jdk的文档说明,才对Buffer对象的概念了然于胸。 在Buffer类当中有以下四个重要的属性:mark:标记位,用于rese

张新波的技术随笔 1万+

深入分析NIO原理及思想(二)——Java NIO Buffer简介

    前文提到了NIO产生的原因,NIO的三个核心,Buffer,Channel,以及Selector。    今天就来讨论一下Buffer,没有什么比自己写一个Buffer更能体会到它的精髓所在了,有兴趣的可以参考源码自己实现一个,本文再这里提供一些参考。    这是整理出来的有关于java.nio几个类的uml图,有心可以看出,基本全是抽象类,也就是说,他们的实现类,都是非public的,不...

qq_37293230的博客 647

【Java NIO】— 深入分析 Buffer 核心原理

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。大家好,我是码哥,今天我们来看看 Buffer。

smart_an的专栏 899

java NIO buffer源码分析

buffer是个抽象类,被各个原生数据类型的buffer继承,nio中channel是通过buffer进行数据读写操作的 buffer是双向操作,既可以读也可以写,实现buffer读写转化功能的,主要是buffer当中的各个属性字段 线程不安全 mark  标记当前索引位置position  下一个可以写或者可以读的索引limit  文档解释:当前不可读或者不可写的索引capacit

summerZBH123的博客 408

java nio—buffer的简单介绍以及堆外内存的分析

作用 NIO提供了一系列buffer类,用作缓存。可以直接从channel中读数据到buffer,也可以从buffer中写数据到channel。缓冲区本质上是一块固定大小的内存,其作用是一个存储器或运输器。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 类图 Buffer的四个属性 容量(capacity):缓冲区能够容纳的数据元素的最大数量。这一容量在缓...

what are you living for ? 942

Java NIO源码分析之Buffer

Java NIO的主要读写处理逻辑就是将数据从通道读入缓冲区,从缓冲区写入到通道中。而这个数据缓冲区的基类就是Buffer。而Buffer本质上就是一块可读写数据的内存,其提供了一些方法,方便外部调用者访问这块内存进行数据读写操作。 使用Buffer读写数据的主要步骤,大体如下: 1、将数据写入Buffer; 2、调用flip()方法,将读写模式由写模式切换成读模式; 3、从Buffer中读取数据; 4、调用clear()方法或

辰辰爸的博客 1425
上一篇: java netty之NioSocketChannel
下一篇: java netty之ChannelPipeline
fjs_cloud
博客等级 码龄15年 248粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值