【NIO】3.1 ByteBuffer的原理

Java NIO 字节缓冲区(ByteBuffer)使用全攻略 Java NIO(New Input/Output)是Java 1.4引入的新的I/O API,它提供了一种非阻塞的、基于缓冲区的I/O操作方式,相比传统的I/O API,具有更高的性能和效率。字节缓冲区(ByteBuffer)是Java NIO中最常用的缓冲区之一,它用于在Java程序和底层I/O设备之间进行字节数据的读写操作。本文的目的是全面介绍ByteBuffer的使用,包括其核心概念、算法原理、操作步骤、实际应用场景等,帮助读者深入理解和掌握ByteBuffer的使用方法。 阅读详情

1. ByteBuffer的原理

1.1 ByteBuffer的重要参数(其实是来自父类Buffer)

private int mark = -1; // 标记位置
private int position = 0; // 当前位置
private int limit; // 限制位置
private int capacity; // 容量

1.2 图示说明

  1. buffer底层维护一个数组,使用allocate(10),相当于分配到长度为10的数组:
    此时buffer是写入模式,只能写数据,不能从中读数据。
    在这里插入图片描述
  2. 每次channel从文件中读取一个字节,并且存入buffer中,position就向后移动一位:
    在这里插入图片描述
  3. 使用flip()方法后,表示调整buffer为读模式,此时position和limit的位置会移动:
    在这里插入图片描述
  4. 读完4个字节后:
    在这里插入图片描述
  5. 调用clear()方法后,position和limit会恢复到初始的位置,此时buffer被调整为写模式。
    只不过buffer中的数据并没有清除,只是写数据时可以覆盖写。
    在这里插入图片描述

2. 补充说明

如果数据没有读完,就想切换到写模式,可以调用compact()方法;
比如:只读取了两个数据:
在这里插入图片描述

调用compact(),几个指针对应变化:
此时未读的数据,会移动到前面。
在这里插入图片描述

UniDexGrasp++算法实战:无需预生成姿态的灵巧抓取测试指南 本文详细解析了UniDexGrasp++算法在灵巧抓取测试中的实战应用,该算法无需预生成姿态即可实现高效抓取,特别适合处理形状不规则的物体。文章涵盖了环境配置、数据集优化、训练流程及实际测试中的调参技巧,帮助开发者快速掌握这一ICCV 2023提出的先进算法。 阅读详情

相关推荐

攻击时间控制的动态逆三维制导律(源代码)

%参考文献:《攻击时间控制的动态逆三维制导律》,哈尔滨工程大学学报,2010 %编程难点:视线坐标系与参考坐标系间的转换关系 一、采用本文方法结果 二、偏航通道采用增广比例导引律

算法小站 2393

Nio ByteBuffer组件读写指针切换原理与常用方法

ByteBuffer ByteBuffer在Nio中用的比较多,所以需要对它也要有一定的了解 ByteBuffer的使用步骤: 向buffer中写入数据,例如调用channel.read(buffer); 调用buffer.flip()切换至读模式 从buffer中读取数据,例如调用buffer.get(); 调用buffer.clear()或者compact()切换至写状态 重复1~4步骤 那么为什么使用要按照这个步骤去使用ByteBuffer并且要切换读写模式嘞? 内部结构 首先ByteBuffer

qq_44027353的博客 1812

高功率半导体叠阵激光准直

摘要:研究针对高功率半导体激光器叠阵的光束整形问题,通过Zemax软件模拟5个巴条(间隔1.81mm)的LD阵列(总功率300W)。采用非序列模式建立模型,设置慢轴/快轴发散角分别为5°和19.5°,并配置包含19个发光点的巴条结构。通过S-TIH53材质的快轴准直镜(焦距0.6mm)和慢轴准直镜(焦距2.88mm)进行光束整形,有效降低了快慢轴发散角。仿真结果表明该方法能显著改善叠阵激光的光束质量,为高亮度光纤耦合提供了解决方案。

Zhaxibamao的博客 915

Java NIO ByteBuffer原理使用图文详解

ByteBuffer总体使用起来和Netty的ByteBuf对比没有Netty ByteBuf好用。但是对于使用原生的Java NIO的开发来说也是可以的。主要是需要用户自己对读写进行转换等操作,使用起来比较繁琐。但是整个ByteBuffer的实现还是比较简单的。

知识分享官 1032

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7455

java.nio.ByteBuffer详解

一、ByteBuffer原理 关于这个类,其实他有两个子类:一个是HeapByteBuffer和DirectByteBuffer关于这两个类的区别很好理解: DirectByteBuffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给人感觉是“内...

tyrroo的博客 3103

RSL-RL:开源人形机器人强化学习控制研究库

摘要:RSL-RL是一款专为机器人领域设计的开源强化学习库,其核心特点是紧凑性、可修改性和高性能。该库聚焦PPO和BC两大主流算法,并整合了对称性增强、好奇心驱动等机器人专用技术。通过纯GPU训练优化,RSL-RL在大型仿真中展现出卓越的吞吐性能,已成功应用于腿足运动控制、全身协调等多个机器人研究场景。其轻量级架构包含运行器、算法和网络三个可独立修改的组件,支持TensorBoard等主流日志工具。该框架特别适合需要快速原型开发的机器人研究者,但不适用于通用机器学习基准测试。开源地址:https://git

2506_90492529的博客 1675

ByteBuffer Android

ByteBuffer是NIO里用得最多的Buffer,它包含两个实现方式:HeapByteBuffer是基于Java堆的实现,而DirectByteBuffer则使用了unsafe的API进行了堆外的实现。这里只说HeapByteBuffer。 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据

zhuangyalei的专栏 4919

一文吃透 SAP HANA SDA:把分散数据当作本地数据来用的那把钥匙

摘要:SAP HANA SDA(Smart Data Access)技术详解:150字精要 SAP HANA SDA是一种数据虚拟化技术,允许在不复制数据的情况下访问远端数据源。核心功能包括: 通过Remote Source定义连接配置 创建Virtual Table作为本地代理 支持谓词下推优化查询性能 与SDI技术协同工作扩展数据集成能力 典型应用场景包括: 跨系统联邦查询 冷热数据分层管理 混合云数据整合 远程表复制(RTR)实现近实时数据同步 实施要点: 需关注适配器能力差异 合理运用查询下推优化

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

ABAP Bits and Bytes 完全参考,理解内存、字节、位运算与类型解释

ABAP开发中业务代码与底层字节处理的差异:业务层关注采购订单、会计凭证等语义信息,而接口开发需处理十六进制、位运算等底层操作。文章通过整数变量示例说明同一段字节在不同类型解释下会呈现不同值,并介绍x类型、位运算及类型转换的实际应用。这些知识在文件接口、加密传输等场景中尤为重要,开发者需注意字节序、编码等问题。建议将底层协议处理与业务逻辑分离,以保持代码清晰和可维护性。

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

NIO中的Buffer(ByteBuffer)

NIO中的Buffer(ByteBuffer)

菜鸟一枚,对云原生感兴趣 806

【3】 灰度变换(1)

第三章(1)【总三】

课题分离 659

一文搞懂ByteBuffer使用与原理

已知NIOChannelBuffer和Selector。那么Buffer的作用就是提供一个缓冲区,用于用户程序和Channel之间进行数据读写,也就是用户程序中可以使用Buffer向Channel写入数据,也可以使用Buffer从Channel读取数据。ByteBuffer是Buffer子类,是字节缓冲区,特点如下所示。大小不可变。一旦创建,无法改变其容量大小,无法扩容或者缩容;读写灵活。内部通过指针移动来实现灵活读写;支持堆上内存分配和直接内存分配。本文将对ByteBuffer的相关概念,常用。

m0_71777195的博客 5720

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NIO数据载体ByteBuffer学习

根据阅读RocketMQ源码消息存储设计时,本文主要是记录ByteBufer的各个API的用法和含义,方便自己查看;公众号:帽爹的技术轮子 ByteBuffer是NIO中最常用的数据载体,它包含两个实现方式:HeapByteBuffer是基于Java堆的实现,而DirectByteB...

232

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java NIO ByteBuffer 的使用与源码研究

一、结论   ByteBuffer 是Java NIO体系中的基础类,所有与Channel进行数据交互操作的都是以ByteBuffer作为数据的载体(即缓冲区)。ByteBuffer的底层是byte数组,通过四个重要的成员变量(mark、limit、position、capacity)来实现对缓冲区的读写数据以及复用缓冲区等操作。ByteBuffer 申请缓冲区内存(数组)的方式有两...

dnuvb68642的博客 278

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【NIO】3.2 ByteBuffer的原理-AI参考

ByteBuffer的原理-ai参考

weimin821的博客 274

bytebuffer长度_ByteBuffer详解

在Java nio中,主要有三大组件:Buffer,Channel和Selector。这三者之间的关系可以按照如下方式进行理解:Buffer提供了一个字节缓冲区,其可以不断的从Channel中读取接收到的数据。Buffer的优点主要在于其提供了一系列的Api,能够让用户更方便的对数据进行读取和写入;Channel简单来说就是一个信道,也就是客户端与服务器的一个连接,而且每个客户端都会对应一个Cha...

weixin_39859055的博客 2658

【JAVA 网络编程系列】NIO -- ByteBuffer 堆内与堆外内存

【JAVA 网络编程系列】NIO -- ByteBuffer堆内与堆外内存 【1】Unsafe 与堆外内存分配 Unsafe 操作直接内存的方法 // 分配内存 public native long allocateMemory(long var1); // 释放内存 public native void freeMemory(long var1); // 设置内存值 public native void setMemory(Object var1, long var2, long var4, b.

CopperSun 技术博客 1020

java.nio.ByteBuffer常用方法详解

在Java nio中,主要有三大组件:Buffer,Channel和Selector。Buffer提供了一个字节缓冲区,其可以不断的从Channel中读取接收到的数据。Buffer的优点主要在于其提供了一系列的Api,能够让用户更方便的对数据进行读取和写入;Channel简单来说就是一个信道,也就是客户端与服务器的一个连接,而且每个客户端都会对应一个Channel对象;

long_hai_d的博客 2111

java实践4之浅谈文件IO、实现带缓冲区读写、NIO、理解Bytebuffer核心参数、Mmap、零拷贝

java IO NIO filechannel mmap bytebuffer 堆外内存

m252131895的博客 1217

java中的ByteBuffer

类ByteBuffer是Java nio程序经常会用到的类,也是重要类 ,我们通过源码分析该类的实现原理。 一.ByteBuffer类的继承结构 public abstract class ByteBuffer extends Buffer implements Comparable   ByteBuffer的核心特性来自Buffer 二. ByteBuf

qq_29663071的博客 3399

深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

<br />为了对后续关于Mina 的 ProtocolFilter( 编解码器 ) 的编写有一个更好的理解,本文讲述一下关于 Mina ByteBuffer 和 Java Nio ByteBuffer 的区别。关于 Java Nio ByteBuffer 和 Mina ByteBuffer 及其子类的类图在附件中都已经给出了。因为 Mina 的 ByteBuffer 在 Mina 2.0 以上的版本中都改称 IoBuffer 。为了使后文关于 ByteBuffe

wkyb608的专栏 1717

《Netty权威指南》之NIO ByteBuffer详解

  Java NIO(New IO) 是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同, NIO支持面向缓冲区的、基于   通道的IO操作。 NIO将以更加高效的方式进行文件的读写操作。 Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer)。通道表示打开到 ...

凌夜知惜 537
上一篇: 【NIO】2. ByteBuffer的基本使用
下一篇: 【NIO】3.2 ByteBuffer的原理-AI参考
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值