Buffer的数据存取

RHCA III之路---EX436-1 由于ha这门课有大量命令需要在3个节点上同步执行.如果执行history会出现前面数字,复制多行会有些麻烦.lab环境是nodea,nodeb,nodec 考试环境是node1,node2,node3。就可以快速将历史命令实现可多行复制,当然也可以用awk进行分割,个人喜好随意。技巧只能加快答题速度,对考试得分帮助不大。确认3个红框内容一致,且没报错即可。再执行一个histrory。3个node节点上运行。这样就能1次复制3行。 阅读详情

Buffer的数据存取

缓冲区 存放要读取的数据    

缓冲区 和 通道 配合使用

一个用于特定基本数据类行的容器。有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类。

  Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道读入到缓冲区,从缓冲区写入通道中的。

  Buffer就像一个数组,可以保存多个相同类型的数据。根据类型不同(boolean除外),有以下Buffer常用子类:(没有boolean的哈)

ByteBuffer (用的最多 )

CharBuffer

ShortBuffer

IntBuffer

LongBuffer

FloatBuffer

DoubleBuffer

 

Buffer的概述

参数:

1)容量(capacity):表示Buffer最大数据容量,缓冲区容量不能为负,并且建立后不能修改。一旦声明 不能改变

2)限制(limit):第一个不应该读取或者写入的数据的索引,即位于limit后的数据不可以读写。缓冲区的限制不能为负,并且不能大于其容量(capacity)。  缓冲区可用大小

3)位置(position):下一个要读取或写入的数据的索引。缓冲区的位置不能为负,并且不能大于其限制(limit)。    缓冲区正在操作的位置 默认从0开始

4)标记(mark)与重置(reset):标记是一个索引,通过Buffer中的mark()方法指定Buffer中一个特定的position,之后可以通过调用reset()方法恢复到这个position。

 方法:

  put( ) 往buffer存放数据

  get () 获取数据

看源码中的四个核心参数:

 

    @Test
    public void Test01() {
        //初始化 byteBuffer的大小
      ByteBuffer byteBuffer = ByteBuffer.allocate(10323); 
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("buffer中存放数据");
        byteBuffer.put("add".getBytes());
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        
    }

 

 

limit 表示 现在limit 里面

@Test
    public void Test01() {
        //初始化 byteBuffer的大小
      ByteBuffer byteBuffer = ByteBuffer.allocate(10323); 
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("buffer中存放数据");
        byteBuffer.put("add".getBytes());
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        //开启读取模式   讲position设为0   不开启就从当前 position位置开始读取,会报错
        byteBuffer.flip();
        byte[] bytes = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes);
        System.out.println(new String(bytes,0,bytes.length));
    }

解决重复读取:

@Test
    public void Test01() {
        //初始化 byteBuffer的大小
      ByteBuffer byteBuffer = ByteBuffer.allocate(10323); 
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("buffer中存放数据");
        byteBuffer.put("add".getBytes());
        //开启读取模式   讲position设为0   不开启就从当前 position位置开始读取,会报错 。 读取完毕时候 position会还原
        System.out.println("开启读取。。。。");
        byteBuffer.flip();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes);
        System.out.println(new String(bytes,0,bytes.length));
        System.out.println("重复读取");
        byteBuffer.rewind();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes1 = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes1);
        System.out.println(new String(bytes1,0,bytes1.length));
        
        
        
    }

清空:

    @Test
    public void Test01() {
        //初始化 byteBuffer的大小
      ByteBuffer byteBuffer = ByteBuffer.allocate(10323); 
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("buffer中存放数据");
        byteBuffer.put("add".getBytes());
        //开启读取模式   讲position设为0   不开启就从当前 position位置开始读取,会报错 。 读取完毕时候 position会还原
        System.out.println("开启读取。。。。");
        byteBuffer.flip();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes);
        System.out.println(new String(bytes,0,bytes.length));
        System.out.println("重复读取");
        byteBuffer.rewind();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes1 = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes1);
        System.out.println(new String(bytes1,0,bytes1.length));
        System.out.println("清空缓存区");
        byteBuffer.clear();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes11 = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes11);
        System.out.println(new String(bytes11,0,bytes11.length));
        
        
        
    }

清空缓冲区,名义上其实是把 下标修改了 但是值还是存在的 数值遗忘

看看最终版本:

@Test
    public void Test01() {
        //初始化 byteBuffer的大小
      ByteBuffer byteBuffer = ByteBuffer.allocate(1024); 
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("buffer中存放数据");
        byteBuffer.put("addNew".getBytes());
        //开启读取模式   讲position设为0   不开启就从当前 position位置开始读取,会报错 。 读取完毕时候 position会还原
        System.out.println("开启读取。。。。");
        byteBuffer.flip();
        System.out.println("读取buffer值");
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        byte[] bytes = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes);
        System.out.println(new String(bytes,0,bytes.length));
        System.out.println("重复读取");
        byteBuffer.rewind();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes1 = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes1);
        System.out.println(new String(bytes1,0,bytes1.length));
        System.out.println("清空缓存区");
        byteBuffer.clear();
        System.out.println(byteBuffer.position());   //默认0
        System.out.println(byteBuffer.limit());      
        System.out.println(byteBuffer.capacity());
        System.out.println("读取buffer值");
        byte[] bytes11 = new byte[byteBuffer.limit()];
        byteBuffer.get(bytes11);
        System.out.println(new String(bytes11,0,bytes11.length));
        
        
        
    }

 

上述缓冲区管理的方式几乎

 * 通过allocate()获取缓冲区

 * 二、缓冲区核心的方法 put 存入数据到缓冲区 get <br>获取缓冲区数据 flip 开启读模式

 * 三、缓冲区四个核心属性

 * capacity:缓冲区最大容量,一旦声明不能改变。 limit:界面(缓冲区可以操作的数据大小) limit后面的数据不能读写。

 * position:缓冲区正在操作的位置

 

1)容量(capacity):表示Buffer最大数据容量,缓冲区容量不能为负,并且建立后不能修改。

2)限制(limit):第一个不应该读取或者写入的数据的索引,即位于limit后的数据不可以读写。缓冲区的限制不能为负,并且不能大于其容量(capacity)。

3)位置(position):下一个要读取或写入的数据的索引。缓冲区的位置不能为负,并且不能大于其限制(limit)。

4)标记(mark)与重置(reset):标记是一个索引,通过Buffer中的mark()方法指定Buffer中一个特定的position,之后可以通过调用reset()方法恢复到这个position。

 

神州路由器DHCPv6配置 神州路由器DHCPv6配置.。 阅读详情

相关推荐

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 321

Protocol buffer 3 数据类型映射

.proto Type Notes C++ Type Java Type Python Type[2] Go Type Ruby Type C# type double ...

chuhui1765的博客 704

WINDOWS下SIP拨号的实现

在WIN10上拨打SIP电话  由于我的交换原理实验有一个是关于SIP的抓包的。而之前从未接触过SIP,所以在如何完成一次SIP拨号上遇到了不少问题,查了好多资料都没有完整的或者写的很清楚的,这里就对那些资料做一个总结,给出一个比较完善的解决方案,一来是记录此次实验的收获,而来也可能为其他有同样困惑的人解惑。  废话不多说直接开始。首先是下载一个可以拨打SIP电话的客户终端,这里我选择的是MicroSIP, 下载红圈内的文件,下载好之后直接一路安装即可,没有什么特别注意的地方。  安装好客户端之后,就需要注

weixin_43918519的博客 3807

javaNIO实战2----> java NIO的缓冲区Buffer实战

1、Buffer缓冲区详细介绍 在java NIO套件中,Buffer的作用主要就是用来存取数据的,Buffer是一个抽象类,其类图主要如下: 每一个Buffer实现对应着这种Buffer只能存储此种数据,例如BytreBuffer就只能存储字节数据,这些缓冲区都是用其实现类的静态方法allocate()来进行分配,案例如下: 其中1024表示分配的缓冲区的容量,一旦分配就不能修改容量。 ByteBuffer allocate = ByteBuf...

qq_34978129的博客 308

OPNET网络仿真实验

外网

嚴 帅的博客 1万+

契约锁代码审计分析

但是正常来讲,定义了这么多的路由,肯定会有一个通用的判断逻辑,来判断请求的url是否和这些路由匹配。POC中有一点值得注意,Spring新一些的版本中支持以表单的形式来为参数赋值,且无需用注解。但是需要注意4.2.8的代码逻辑和新版本中的不同,此漏洞可能存在于版本大于4.2.8的版本中。方法用于解析LICENSE,先进行AES解密,再从字符串转换成json格式的License。loadPath实际判断传入的path是否和下面的path相等,如果不相等返回null。,如果包含这三个中的一个就会抛出异常。

好记性不如烂笔头 5718

java nio 系列教程(1)----buffer介绍和使用方法

大家推荐个靠谱的公众号程序员探索之路,公众号内点击网赚获取彩蛋,大家一起加油 ​ package com.zzh.buffer; import org.junit.jupiter.api.Test; import java.nio.ByteBuffer; /** * 一.缓冲区(buffer):在java nio中负责数据的存取.缓冲区就是数组.用于存储不同数据类型的数据 * 根...

yueloveme的博客 309

X书关键词协议搜索

【代码】X书关键词协议搜索。

Codeooo 博客 6377

io.netty学习(七)字节缓冲区 ByteBuf(下)

在了解了 ByteBuffer 的原理之后,再来理解Netty 的 ByteBuf 就比较简单了。ByteBuf 是 Netty 框架封装的数据缓冲区,区别于positionlimitflip等属性和操作来控制ByteBuffer的读写,ByteBuf通过两个位置指针来协助缓冲区的读写操作,分别是readIndex和writeIndex。readIndexwriteIndex和capacity通过以上对于ByteBuf的介绍,相信小伙伴们对于ByteBuf的原理也有了一定的了解。

码灵的博客 871

从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合

Vibing Steampunk是一个面向SAP ABAP开发的AI自动化工具集,它通过ADT API将SAP开发能力系统化地暴露给AI助手和命令行工作流。该工具支持ECC、S/4HANA等所有启用ADT的系统,提供代码读取、修改、测试、调试等全流程自动化能力。核心功能包括AI调试、上下文压缩、ABAP语言服务、Lua脚本自动化等,并内置多重安全控制。其分层架构兼容标准ADT和WebSocket扩展,既适合AI驱动开发,也支持传统DevOps自动化,特别适用于老系统代码考古、知识接力和复杂问题诊断场景。

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

【大语言模型 37】知识蒸馏深度实战:大模型向小模型迁移

本文深入探讨了知识蒸馏技术在大语言模型领域的应用,详细阐述了如何将庞大复杂的大模型知识有效迁移到轻量级小模型中。文章系统介绍了知识蒸馏的理论基础、多种蒸馏损失函数设计、特征匹配与注意力迁移技术、渐进式蒸馏策略以及全面的效果评估方法。通过实战案例和完整代码实现,读者将掌握从理论到实践的知识蒸馏全流程,了解如何在保持模型性能的同时显著降低计算资源需求,实现大语言模型的高效部署与应用。

熵数实验室 1508

Netty 教程 – ByteBuf详解

相比其它的JAVA对象,缓冲区的分配(包括动态扩容)与释放是一个耗时操作,因此需要尽可能的复用。, 在内存中预留指定大小的存储空间来存放临时数据,其他。为什么会自动扩容呢?扩容的大小是怎么计算的?却可以很好的帮我们做到扩容,它的内部维护了。来的方便,无需关心读写切换指针的问题,在。无法做到自动扩容,当内容超出的时候会抛出。实现原理各不相同,我们先看最基本的。,当我们读取后内部会通过调用。的特别的麻烦,远远没有。来释放这部分空间,类似。之间空间是可写的,等同。中,由于只有一个一个。两个指针,一开始都是。

二师兄撒欢之地 1106

IgH EtherCAT 从入门到精通:第 29 章 实战:EoE 远程维护通道搭建

摘要:本章详细介绍了基于EoE(Ethernet over EtherCAT)协议的远程维护通道搭建方案。主要内容包括:1)网络架构设计,采用管理网络与EoE子网隔离的方案;2)从站EoE支持确认与IP地址配置,提供API和命令行两种方式;3)路由/交换两种部署模式,重点推荐路由模式并给出自动化配置脚本;4)SSH远程访问配置,包括直接连接和跳板访问两种方式;5)安全加固措施,如防火墙规则、SSH密钥认证等;6)故障恢复机制与性能注意事项。该方案实现了通过EtherCAT网络对从站设备的远程SSH访问、文件

从事嵌入式linux android驱动开发,拥有全栈能力 360

NIO之缓冲区(Buffer)的数据存取

缓冲区(Buffer)   一个用于特定基本数据类行的容器。有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类。   Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道读入到缓冲区,从缓冲区写入通道中的。   Buffer就像一个数组,可以保存多个相同类型的数据。根据类型不同(boolean除外),有以下Buffer常用子类: Byte...

dichengyan0013的博客 189

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

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java NIO缓冲区(Buffer)的数据存取

缓冲区(Buffer):用于特定基本数据类型的容器。由java.nio包定义的,所有缓冲区都是Buffer抽象类的子类。 Java NIO中的Buffer主要用于与NIO Channel 进行交互,数据是从Channel读入Buffer,从Buffer写入Channel中。 package com.expgiga.NIO; import java.nio.ByteBuff

728

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java Nio(二): Buffer(缓冲区)的数据存取

从结构来看 Buffer就想 一个数组。可以保存多种类型的数据。他是一个抽象类。常用的子类是ByteBuffer,除了ByteBuffer 外,也可以操作其他基本类型,但是Boolean 除外。 /** * 1,缓冲区(Buffer):在java NIO 中负责数据的存储。缓冲区就是数组。用于存储个中不同类型的数据。 * 根据数据类型的不同(boolean 除外) ,提供了对应的缓冲...

345丶 617

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

NIO缓冲区(Buffer)的数据存取

package nio;import java.nio.ByteBuffer;import org.junit.Test;public class buffer { @Test public void test1(){ String str="abc"; //1、分配指定大小的缓冲区 ByteBuffer buf = ByteBuffe

http://kingim.cn/ 684

Java NIO——缓存区(Buffer)的数据存取

/* *一.缓存区(Buffer): *在Java NIO中负责数据的存储。缓存区就是数组。用于存储不同数据类型的数据。 *根据数据类型的不同(boolean除外),提供相应类型的缓存区: *ByteBuffer *CharBuffer *ShortBuffer *IntBuffer *LongBuffer *FloatBuffer *DoubleBuffer *上述缓存区的管理方式几乎一致,通...

qq_38386085的博客 654

2. NIO_缓冲区(Buffer)的数据存取

package com.wgy.nio; import java.nio.ByteBuffer; import org.junit.Test; /** * 一.缓冲区:在JAVA NIO 中负责数据...

chijianxu0423的博客 188

Java NIO -- 缓冲区(Buffer)的数据存取

缓冲区(Buffer): 一个用于特定基本数据类型的容器。由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类。Java NIO 中的 Buffer 主要用于与 NIO 通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。 Buffer 就像一个数组,可以保存多个相同类型的数据。根据数据类型不同(boolean 除外) ,有以下 Buffer 常用子类:ByteBuf...

weixin_34404393的博客 89

java 缓冲区中的数据存入缓冲区中_缓冲区(Buffer)的数据存取

缓冲区(Buffer)1. 缓冲区(Buffer):一个用于特定基本数据类 型的容器。由 java.nio 包定义的,所有缓冲区 都是 Buffer 抽象类的子类。2. Java NIO 中的 Buffer 主要用于与 NIO 通道进行 交互,数据是从通道读入缓冲区,从缓冲区写入通道中的3. Buffer 就像一个数组,可以保存多个相同类型的数据。根 据数据类型不同(boolean 除外) ,有...

weixin_39549899的博客 1039

NIO——02缓冲区Buffer

一、缓冲区  缓冲区(Buffer)是一个用于存取特定基本数据类型数据的容器,底层是这些基本数据类型的数组,由java.nio包定义,所有缓冲区都是Buffer抽象类的子类。主要用于与NIO通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。  根据数据类型不同,NIO提供了以下类型的Buffer:   ByteBuffer   CharBuffer   ShortBuffer   Int...

如不來的博客 444

二、NIO 中 缓存区(Buffer)的数据存取

package com.stu.buffer; import org.junit.Test; import java.nio.ByteBuffer; /** * 一、缓存区(Buffer):在 Java NIO 中负责数据的存取.缓存区就是数组。用于存储不同的数据类型的数据。 * * 根据数据类型不同(boolean除外),提供了相对应的缓存区。 * ByteBuffer * CharBuffer * ShortBuffer * I...

这天有点热的博客 251

Java-NIO(二):缓冲区(Buffer)的数据存取

缓冲区(Buffer):   一个用于特定基本数据类行的容器。有java.nio包定义的,所有缓冲区都是抽象类Buffer的子类。   Java NIO中的Buffer主要用于与NIO通道进行交互,数据是从通道读入到缓冲区,从缓冲区写入通道中的。   Buffer就像一个数组,可以保存多个相同类型的数据。根据类型不同(boolean除外),有以下Buffer常用子类: By

nn2345的博客 477

java Buffer缓冲区类的使用

java提供了缓冲区类——Buffer,负责数据的存取,缓冲区的本质就是数组,用来存放不同类型的数据。 根据数据类型分类: ByteBuffer。 CharBuffer。 ShortBuffer。 IntBuffer。 LongBuffer。 FloatBuffer。 DoubleBuffer。 创建缓冲区: allocate()创建缓冲区。 存入和获取方法: put():数据存入缓冲区。 get():获取缓冲区中的数据。 核心属性(4个): capacity:容量,表示缓冲区中最

quietbxj的博客 690
上一篇: 关于NIO编程
下一篇: make和rest用法
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值