NIO - Buffer缓冲区

2025年12月11日 Coherent收发器下沉到数据中心:调研 技术可行性已基本具备。随着3nm DSP技术的成熟和Coherent-Lite等低功耗方案的推出,Coherent技术与IMDD的功耗差距在800G及以上速率节点快速缩小。特别是在1.6T及更高速率,两种技术的功耗开始趋于收敛。同时,通过系统级优化,如将DSP功能从可插拔模块转移到ASIC芯片,可实现30%以上的功耗降低。在成本方面,硅光技术的进步使得单通道硅光引擎BOM成本降至18美元,较2020年下降62%,逼近InP方案的经济临界点。光学系统机会丰富多样。 阅读详情

*Buffer : 缓冲区  是特定基本类型元素的线性有限序列  

                 Buffer中的数据结构是原始数据类型的数组

例如   jdk  ByteBuffer中定义的byrte数组

public abstract class ByteBuffer  extends Buffer
    implements Comparable<ByteBuffer>
{
    final byte[] hb;
}

Buffer类图(除去boolean原始类型没有  其他都有)


*Buffer的实例化

1.Buffer具体子类的allocate方法

  例如 ByteBuffer 

public static ByteBuffer allocate(int capacity){}  //参数为Buffer的容量

2.Buffer具体子类的wrapa方法

 例如DoubleBuffer

public static DoubleBuffer wrap(double[] array) {}


*重要属性(父类Buffer中定义):

1.capacity  容量  缓冲区中能够容纳元素的数量  也就是Buffer中数组的大小   不可以改变

2.position  位置  下一个要操作(读写)的元素索引  位置会随着调用相应的read  put等方法改变

3.limit     上限   缓冲区中目前容纳了 多少元素  也就是缓冲区中目前元素的个数

4.mark    用于记录position的当前位置  在调用reset方法  重新设置position的值为 mark变量上次记录的

 上面四个属性 要遵循一下关系

  0 <= 标记(mark) <= 位置(position) <= 限制 (limit)<= 容量(capacity)

* 重要方法(以ByteBuffer为例)

 1. 获取缓冲区中的内容 此方法有多个版本重载

    public byte get() {
	return hb[ix(nextGetIndex())];
    }

2.向缓冲区写入数据  有多个重载

   public ByteBuffer put(byte x) {
	hb[ix(nextPutIndex())] = x;
	return this;
    }

3.在当前缓冲区基础上  创建一个新的缓冲区

    public ByteBuffer slice() {
	return new HeapByteBuffer(hb, -1, 0,this.remaining(),this.remaining(), this.position() + offset);
    }

 4 返回缓冲区的容量

    public final int capacity() {
	return capacity;
    }

  5. 为position做个标记

    public final Buffer mark() {
	mark = position;
	return this;
    }

  6.将缓冲区的位置设置为以前标记的位置

    public final Buffer reset() {
        int m = mark;
	position = m;
	return this;
    }

  7.返回缓冲区下一个要操作元素的索引

    public final int position() {
	return position;
    }

  8.设置缓冲区起始操作(读写)索引 和  有效数据索引

    public final Buffer flip() {
	limit = position;
	position = 0;
	mark = -1;
	return this;
    }

   9.重置缓冲区

    public final Buffer clear() {
	position = 0;
	limit = capacity;
	mark = -1;
	return this;
    }

    后面两个方法很重要  

     读文件的实例代码

//..省略
		FileChannel fileChannel = fileInputStream.getChannel();
		//1.初始化内部数组
		ByteBuffer buffer = ByteBuffer.allocate(4);
		//2.read方法会设置position
		while(fileChannel.read(buffer) != -1) {
			//3.limit = position; 
			//position = 0
			buffer.flip();
			System.out.println(charset.decode(buffer));
			//4.position = 0, limit=capacity
			buffer.clear();	
		}
		//..省略

                      1.初始化容量为 4的Buffer  Buffer 数组全部是空的

                           

                             2.调用Channel的read方法  向缓冲区写入2个字节

                             

                           3.如果这个时候调用 Buffer get方法 读的是position =2 limit=3之间的数据

                              
                        4.调用 Buffer #flip方法之后

                          

                          5.再一次调用Buffer get方法

                            

                             6.Buffer clean方法

                                 

 

 

高级数据库--作业及答案 中科大金培权老师的高级数据库课程作业及答案 阅读详情

相关推荐

ICS v9.5 OverbyteIcsWSocket.pas 整体架构分析

核心架构:OverbyteIcsWSocket.pas 是 Internet Component Suite (ICS) 的基础网络组件单元,提供跨平台 Winsock API 封装,支持TCP/UDP 客户端/服务器,DNS 解析和Raw Socket。在 v9.5 中,SSL/TLS 代码已分离至 OverbyteIcsSslBase.pas 等单元,使核心单元更精简,专注于非加密 socket 操作。

sonadorje的专栏 993

ByteBuffer用法小结

 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区.缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer.因此ByteBuffer的用法是有必要牢固掌握的.1.创建

mars5337的专栏 17万+

MIL图像处理那些事:MIL的安装和MIL工具箱

MIL图像处理那些事:MIL的安装和测试,如何用C#使用MIL

十多年IT经验,专注机器视觉,智能制造半导体行业 5274

java allocate_Java中的ByteBufferallocate()方法

可以使用java.nio.ByteBuffer类中的方法allocate()分配新的ByteBuffer。该方法需要一个参数,即缓冲区的容量。它返回分配的新的ByteBuffer。如果提供的容量为负,则抛出IllegalArgumentException。演示此的程序如下所示-示例importjava.nio.*;importjava.util.*;publicclassDemo{pub...

weixin_30572707的博客 918

OpenClaw常见4大赋能工作场景

OpenClaw不仅仅是一个AI工具,更像是个人与企业的“数字操作系统”——它连接大模型与真实世界,让“思考”与“行动”无缝闭环。

王国平的博客 626

【学习系列】SAP RAP 4:通过注解来完成一些常规需求

本文介绍了RAP应用中常用注解的实现方式,包括搜索帮助、文本描述绑定、联动搜索、字段控制等功能。通过@Consumption、@UI等注解可以实现搜索帮助定义、多字段联动、必输校验、默认排序和默认值设置。管理字段可通过@Semantics注解自动记录创建/修改信息,长文本使用@UI.multiLineText实现多行显示。这些注解可优化界面交互和数据管理,为后续行为定义功能开发奠定基础。文章结构清晰,针对不同需求提供了具体的实现方案和代码示例。

DeveloperMrMeng的博客 697

ByteBuffer的allocate()方法详解

ByteBuffer的allocate()方法详解 allocate()方法用于分配缓冲区。但是如果是聚集写入,与分散读取,就需要注意这个大小设置, String property = System.getProperty("user.dir"); FileOutputStream FileOutputStream = new FileOutputStream(property ...

weixin_44400390的博客 2万+

【25届数字IC秋招总结】面试经验10——紫光同芯

25届数字ic面试记录——紫光同芯

lalala0635的博客 862

NIO学习笔记

NIO Reactor

qq_32806781的博客 180

wxComboBox类的使用方法及示例代码

其中,parent表示该控件的父窗口,ID_COMBOBOX是该控件的ID,用于在事件处理函数中区分不同的控件,"默认选项"是下拉列表框的默认选项,options是wxArrayString类型的数组,用于存储下拉列表框中的选项,style可以指定wxComboBox的样式。wxComboBox是wxWidgets中的一个常用控件,它可以被用来显示一组在下拉列表框中的选项,并允许用户从中选择一个选项。上述就是wxComboBox类的基本使用方法,使用这个控件可以方便地实现下拉列表框的功能。

学习使你进步。 713

【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦

好了,关于 【Python开发者必看】Windows下Python版本管理器Pyenv安装使用,轻松管理Python版本的入门与进阶指南,从此告别Python环境不兼容的噩梦 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。1、手动下载对应版本到 pyenv-win\install_cache 目录(如上手动操作安装步骤,文件名需匹配,如 python-3.10.0-amd64.exe)。该指令会列出,pyenv包管理工具所支持的所有python版本,

Spring Boot-Common On With You 852

NIO 之 ByteBuffer实现原理

相关文章IO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理前言Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行读写的。 在NIO中,使用通道(Channel)基于缓冲区数据块的读写。流是基于字节一个一个的读取和写入。 通道是基于块的方式进行读取和写入。Buf

jijianshuai的专栏 3745

海康VisionMaster与西门子Smart 200进行S7通信

海康VisionMaster与西门子Smart 200进行S7通信

haier123888的博客 8180

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

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

热带鱼的技术博客 2260

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NIO——02缓冲区Buffer

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

如不來的博客 444

NTscan扫描工具

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

Java NIO的Buffer缓冲区和Channel通道详细总结

NIO 主要有在 NIO 中,并不是以流的方式来处理数据的,而是以 buffer 缓冲区和 Channel 通道来处理数据的。可以简单理解为把Channel通道比作 铁路,buffer缓冲区比作成火车(运载着货物),而NIO就是通过来实现数据的处理。Buffer 是缓冲区的抽象类,ByteBuffer 是(在通道中读写字节数据):拿到一个缓冲区我们往往会做什么?很简单,就是。所以,缓冲区的核心方法就是 put 和 get:Buffer 类维护了 4 个核心变量来提供。get()put()现在,怎么拿呀。

qq_62636650的博客 1564

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

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

Java NIO之缓冲区Buffer

NIO与IO的区别 由面向存取数据的载体、是否阻塞等可以分为以下三点不同: 面向流: 数据像水流一样传输,并且,要么输入要么输出,流是单向的。所以以前的IO流都有输入流,输出流。 面向缓冲区: NIO会在程序与文件(磁盘、网络)之间建立一个通道用于连接,然后通过缓冲区进行数据存取,通过通道进行连接传递。 阻塞IO和非阻塞IO、选择器主要是针对网络编程而言的。 通道( Ch...

ystyaoshengting的专栏 590

Java NIO之缓冲区Buffer分析

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

梦悠哉的博客 1740

Java-NIO之Buffer(缓冲区)

Buffer 是什么 Buffer(缓冲区)本质上是一个由基本类型数组构成的容器。 我们先看看Buffer类的基本构成: public abstract class Buffer { // Invariants: mark <= position <= limit <= capacity private int mark = -1; private int position = 0; private int limit; private in

HongYu012的博客 1038

java之NIO缓冲区Buffer的使用

 先说说传统io和Nio的区别 看如下两个图,传统的io传输是直接面对的流,面对的数据进行传输的,并且每个流都是单向的,得建立输入流输出流,但是NIO它建立的通道是双向的,程序直接面对的不是这个通道,而是缓冲区,这个缓冲区就相当于火车,通道是铁路,程序面对的是火车,往火车中存取数据,并且之建立一个通道就可以了,这就是它们之间的一个区别. 先了解一下缓冲区  * 缓存区(Buffer)...

kxj19980524的博客 293

java NIO入门篇——缓冲区Buffer

文章目录什么是缓冲区?缓冲区的使用1.allocate、put、flip、get、rewind、clear2.mark3.直接缓冲区总结 什么是缓冲区? java 传统I/O将输入输入抽象为字节流或字符流,是基于单个字节的,优点是使用简单,缺点就是效率低下。而且IO的各种流是阻塞的。当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入,在此期间不能再...

qq_43615903的博客 549

NIO之Buffer缓冲区

NIO简介 Java.nio全称Java non-blocking IO或Java New IO,是从jdk1.4 开始引入的一套新的IO api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。 ​ IO操作的模式: ​ PIO(Programing IO): 所有的IO操作由CPU处理,CPU占用率比较高 ...

ShawnaVayne_的博客 535

Java NIO Buffer 缓冲区

本文介绍了 Java NIO 中 Buffer(缓冲区)的相关内容。。。

Regino的博客 457

java笔记--NIO基础--Buffer缓冲区

注意,执行完写操作后想要进行读之前,要执行filp()方法翻转:limit = position;| 使用 | put/get/channel 读写 | 不走 JVM 堆,效率高 || 释放 | 依赖 GC 和 Cleaner | 不可手动释放,不能频繁创建 || native 分配堆外内存 |

lxq6966892的博客 1246

Day387.Buffer缓冲区 -NIO

Java NIO(Buffer) 1.1 Buffer 简介 Java NIO 中的 Buffer 用于和 NIO 通道进行交互。数据是从通道读入缓冲区,从缓冲区写入到通道中的。 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成 NIO Buffer 对象,并提供了一组方法,用来方便的访问该块内存。 缓冲区实际上是一个容器对象,更直接的说,其实就是一个数组,在 NIO 库中,所有数据都是用缓冲区处理的。 在读取数据时,它是直接读到缓冲区中的; 在写入数据时,它也是写入到缓冲区中

阿昌爱Java 903

NIO技术精讲之缓冲区Buffer

1. 缓冲区Buffer NIO中的buffer是一个用于存储基本数据类型值的容器。在使用传统I/O流API时,如InputStream和OutputStream,我们常常把字节流的数据放入byte[]字节数组中,或放入char[]字符数组中进行读写操作,这种处理方式处理比较原始。NIO中为我们提供了缓冲区Buffer类来解决,它还有很多其他方法。 1.1 认识Buffer 这个类小伙伴们平时开发...

ChinaCR07的博客 654
上一篇: NIO - FileChannel
下一篇: NIO - Scatter/Gather
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值