ByteBuffer

本文深入解析Java NIO中的Buffer容器,包括其内部实现、关键属性(position、limit、capacity)及其方法应用。重点介绍如何高效地在基本类型数据间进行读写操作,同时探讨Buffer在内存管理上的优势与限制。

 NIO

 Buffer 一种容器,可以写入和读取基本类型数据。

 Buffer 内部一般是使用数组来实现。

 Buffer 基本属性:

 1.position:数组的下标,下一个读取或写入操作由此下标开始,写入或读取完成后  position会增加读取或写入数据的长度,即指向新的写入或读取位置。

2.limit :数组下标,指明该下标开始,以后的数组元素不可以读取或写入。

           用途:如写入了10个数组元素,limit定为10,则读取操作不可以读取超过10个元素。

3.capacity: 数组的实际长度。可保存元素的最大个数。

4.mark:  通过调用mark()方法,使mark=当前position,即记住当前位置,以便N多操作之后,通过reset()方法使position 回到之前的位置,即position  = mark

 

以上几个属性之间的关系:

 0<=mark<=position<=limit<=capacity

 

Buffer 的方法:

bstract  Object array() 
          返回此缓冲区的底层实现数组(可选操作)
abstract  int arrayOffset() 
          返回此缓冲区的底层实现数组中第一个缓冲区元素的偏移量(可选操作)
 int capacity() 
          返回此缓冲区的容量。
 Buffer clear() 
          清除此缓冲区。position=0,limit=capacity,mark=-1
 Buffer flip() 
          反转此缓冲区。limit=position,position=0,mark=-1
abstract  boolean hasArray() 
          告知此缓冲区是否具有可访问的底层实现数组。
 boolean hasRemaining() 
          告知在当前位置和限制之间是否有元素。
abstract  boolean isDirect() 
          告知此缓冲区是否为直接缓冲区
abstract  boolean isReadOnly() 
          告知此缓冲区是否为只读缓冲区。
 int limit() 
          返回此缓冲区的限制。
 Buffer limit(int newLimit) 
          设置此缓冲区的限制。
 Buffer mark() 
          在此缓冲区的位置设置标记。mark = position
 int position() 
          返回此缓冲区的位置。
 Buffer position(int newPosition) 
          设置此缓冲区的位置。
 int remaining() 
          返回当前位置与限制之间的元素数。limit - position
 Buffer reset() 
          将此缓冲区的位置重置为以前标记的位置。position=mark,limit不变
 Buffer rewind() 
          为重新读取缓冲区准备。 mark=-1,position=0,limit不变

 

ByteBuffer :写入或读取 byte

 CharBuffer :写入或读取 char

 ShortBuffer :写入或读取short

 IntBuffer :写入或读取int

 LongBuffer:写入或读取Long

 DoubleBuffer :写入或读取double

 FloatBuffer :写入或读取Float

 

 

 

 

ByteBuffer 比较常用,其方法:

ByteBuffer 是有两种实现,

1 非直接缓冲区(使用数组实现)  ByteBuffer.allocate(int capacity)

2.直接缓冲区(直接对内存操作)  ByteBuffer.allocateDirect(int capacity)

 

static ByteBuffer allocate(int capacity) 
          分配一个新的字节缓冲区。
static ByteBuffer allocateDirect(int capacity) 
          分配新的直接字节缓冲区。
 byte[] array() 
          返回实现此缓冲区的 byte 数组(可选操作)
 int arrayOffset() 
          返回此缓冲区中的第一个元素在缓冲区的底层实现数组中的偏移量(可选操作)
abstract  CharBuffer asCharBuffer() 
          创建此字节缓冲区的视图,作为 char 缓冲区。
abstract  DoubleBuffer asDoubleBuffer() 
          创建此字节缓冲区的视图,作为 double 缓冲区。
abstract  FloatBuffer asFloatBuffer() 
          创建此字节缓冲区的视图,作为 float 缓冲区。
abstract  IntBuffer asIntBuffer() 
          创建此字节缓冲区的视图,作为 int 缓冲区。
abstract  LongBuffer asLongBuffer() 
          创建此字节缓冲区的视图,作为 long 缓冲区。
abstract  ByteBuffer asReadOnlyBuffer() 
          创建共享此缓冲区内容的新的只读字节缓冲区。
abstract  ShortBuffer asShortBuffer() 
          创建此字节缓冲区的视图,作为 short 缓冲区。
abstract  ByteBuffer compact() 
          压缩此缓冲区(可选操作)
 int compareTo(ByteBuffer that) 
          将此缓冲区与另一个缓冲区进行比较。
abstract  ByteBuffer duplicate() 
          创建共享此缓冲区内容的新的字节缓冲区。
 boolean equals(Object ob) 
          判断此缓冲区是否与另一个对象相同。
abstract  byte get() 
          相对 get 方法。
 ByteBuffer get(byte[] dst) 
          相对批量 get 方法。
 ByteBuffer get(byte[] dst, int offset, int length) 
          相对批量 get 方法。
abstract  byte get(int index) 
          绝对 get 方法。
abstract  char get基本数据类型() 
          用于读取 本数据类型 值的相对 get 方法。
abstract  char get本数据类型(int index) 
          用于读取 本数据类型 值的绝对 get 方法。
  
 boolean hasArray() 
          判断是否可通过一个可访问的 byte 数组实现此缓冲区。
 int hashCode() 
          返回此缓冲区的当前哈希码。
abstract  boolean isDirect() 
          判断此字节缓冲区是否为直接的。
 ByteOrder order() 
          获取此缓冲区的字节顺序。
 ByteBuffer order(ByteOrder bo) 
          修改此缓冲区的字节顺序。
abstract  ByteBuffer put(byte b) 
          相对 put 方法(可选操作)
 ByteBuffer put(byte[] src) 
          相对批量 put 方法(可选操作)
 ByteBuffer put(byte[] src, int offset, int length) 
          相对批量 put 方法(可选操作)
 ByteBuffer put(ByteBuffer src) 
          相对批量 put 方法(可选操作)
abstract  ByteBuffer put(int index, byte b) 
          绝对 put 方法(可选操作)
abstract  ByteBuffer put基本数据类型(数据类型 value) 
          用来写入 数据类型 值的相对 put 方法(可选操作)
abstract  ByteBuffer put基本数据类型(int index, 数据类型 value) 
          用于写入 数据类型 值的绝对 put 方法(可选操作)
  
abstract  ByteBuffer slice() 
          创建新的字节缓冲区,其内容是此缓冲区内容的共享子序列。
 String toString() 
          返回汇总了此缓冲区状态的字符串。
static ByteBuffer wrap(byte[] array) 
          将 byte 数组包装到缓冲区中。
static ByteBuffer wrap(byte[] array, int offset, int length) 
          将 byte 数组包装到缓冲区中。

 

 

 

 


 

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值