`

缓冲区视图

    博客分类:
  • NIO
 
阅读更多

ByteBuffer类的另外一个常见的使用方式是在一个已有的ByteBuffer类的对象上创建出各种不同的视图。这些视图和它所基于的ByteBuffer类的对象共享同样的存储空间,但是提供额外的实用功能。在功能上,ByteBuffer类的视图与它所基于的ByteBuffer类的对象之间的关系类似于3.1.4节介绍的过滤流和它所包装的流的关系。正因为这种共享存储空间的特性,在视图中对数据所做的修改会反映在原始的ByteBuffer类的对象中。

最常见的ByteBuffer类的视图是转换成对基本数据类型进行操作的缓冲区对象。这些缓冲区包括CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer和DoubleBuffer等Java类。从这些缓冲区的类名就可以知道所操作的数据类型。ByteBuffer类提供了对应的方法来完成相应的转换,如asIntBuffer方法在当前ByteBuffer类的对象的基础上创建一个新的IntBuffer类的视图。新创建的视图和原始的ByteBuffer类的对象所共享的不一定是全部的空间,而只是从ByteBuffer类的对象中的当前读写位置到读写限制之间的可用空间。在这个空间范围内,不论是在ByteBuffer类的对象中还是在作为视图的新缓冲区中,对数据所做的修改,对另一个来说都是可见的。除了数据本身之外,两者的读写位置、读写限制和标记位置等都是相互独立的。在代码清单3-6中,创建视图的时候,两者所共享的是序号4~32的空间。在IntBuffer类的对象中所做的修改,对于原始的ByteBuffer类的对象也是可见的。ByteBuffer类的基本数据类型视图在开发中的使用场景比较多,这主要是因为很多I/O相关的API都使用ByteBuffer类作为参数类型,而ByteBuffer类的视图可以很方便地对内容进行操作。

代码清单3-6 字节缓冲区的视图

  1. public void viewBuffer() {  
  2.     ByteBuffer buffer = ByteBuffer.allocate(32);  
  3.     buffer.putInt(1); //读取位置为4  
  4.     IntBuffer intBuffer = buffer.asIntBuffer();  
  5.     intBuffer.put(2);  
  6.     int value = buffer.getInt(); //值为2  

除了基本类型的缓冲区视图之外,另外一类视图是类型相同的ByteBuffer类的对象。通过slice方法可以创建一个当前ByteBuffer类的对象的视图,其行为类似于通过asIntBuffer方法创建的视图,只不过得到的是ByteBuffer类的对象。而duplicate方法则用来完全复制一个ByteBuffer类的对象。这个方法与slice方法的区别在于,duplicate方法并不考虑ByteBuffer类的对象的当前读写位置和读写限制,只是简单地全部复制。方法asReadOnlyBuffer的行为类似于duplicate方法,只不过得到的ByteBuffer类的对象是只读的,不能执行写入操作。

对于其他基本类型的缓冲区来说,除了通过ByteBuffer类的视图来创建之外,也可以通过对应类的allocate方法来直接创建。这些缓冲区类与ByteBuffer类的最显著区别在于,其中的容量、读写位置和读写限制都是根据基本类型的个数来计算的,而不是根据字节数计算的。如通过“IntBuffer.allocate(32)”创建的整型缓冲区的容量是32个整数,而不是32个字节。另外,不能直接创建出除ByteBuffer类之外的其他类型的直接缓冲区,只能先创建ByteBuffer类型的直接缓冲区,再创建相应的基本类型的视图。

分享到:
评论

相关推荐

    SuperMap Objects.NET 缓冲区分析

    4. 结果展示:最后,我们可以将生成的缓冲区数据集添加到地图视图上,以便用户查看和分析。 在压缩包文件"CreateBufferAnalyst"中,很可能包含了实现上述步骤的示例代码或者脚本。通过学习和运行这些代码,开发者...

    点和线多边形缓冲区 c#算法

    例如,在Bing Maps API中,你可以通过MapLayer类添加自定义的几何对象,并通过ViewPort.SetZoomAndCenter方法调整视图以显示缓冲区。 总的来说,理解并实现点和线多边形缓冲区的C#算法需要掌握基本的GIS概念、C#...

    基于ArcEngine+C#的缓冲区的分析

    6. **更新地图视图**: 最后,我们需要刷新地图视图(IMapControl.Map.Refresh),以便用户可以看到缓冲区的结果。 在提供的"AE缓冲区代码.doc"文档中,应包含了实现以上步骤的具体C#代码示例。这些代码可能包括了...

    使用 DirectX 12 和 SM 6.6 的非常基本的无绑定渲染设置.zip

    这极大地简化了描述符和管道状态管理无需绑定资源视图(又名descriptors,例如常量缓冲区视图、着色器资源视图,...)无需管理根签名排列。无需管理顶点布局。顶点属性可通过无绑定SRV方式索引直接访问VertexID。...

    TUXEDO的缓冲区

    在TUXEDO系统中,数据传输的核心机制是通过数据缓冲区,它确保了客户端和服务端之间的高效、安全的数据交换。本章主要讨论了TUXEDO的缓冲区类型及其管理方式。 首先,TUXEDO提供了多种缓冲区类型,包括STRING、...

    AE关于点的缓冲区代码

    根据给定的信息,本文将对“AE关于点的缓冲区代码”进行详细的解析与扩展,以便深入了解该段代码实现的功能及原理。 ### 标题理解:“AE关于点的缓冲区代码” 此标题表明代码主要涉及在ArcEngine (AE) 环境下实现...

    arcengine缓冲区分析代码

    ### ArcEngine 缓冲区分析代码详解 #### 引言 缓冲区分析是地理信息系统(GIS)中的一个重要功能,主要用于创建一个围绕特定地理要素(如点、线或多边形)的区域,该区域内的所有对象均处于指定的距离范围内。本文...

    AE缓冲区代码 + ArcEngine连接表join

    AE 缓冲区代码 + ArcEngine 连接表 join AE 缓冲区代码是 ArcGIS 中的一种常用技术,用于生成缓冲区,以便对空间数据进行分析和处理。本文将详细介绍 AE 缓冲区代码的实现步骤,并结合 ArcEngine 连接表 join 进行 ...

    Oracle的数据缓冲区是如何工作

    Oracle的数据缓冲区是数据库性能优化的关键,其工作原理在Oracle 8i及后续版本中发生了显著变化。在早期版本中,新数据块被添加到最近使用列表的前端,但在Oracle 8i之后,新数据块被插入到缓冲区链的中间,引入了...

    API MONITOR 说明文档 PDF

    #### 五、缓冲区视图 API Monitor 提供了输入和输出缓冲区的可视化功能。工具能够自动计算显示的数据量,依据API调用的其他参数或API返回值来确定。例如,在执行`ReadFile`API调用后,工具会根据`...

    ArcGIS缓冲区分析

    需要注意的是,在设置输出范围时可以选择“SameAsDisplay”,以便输出的缓冲区与当前视图的范围一致。此外,还可以选择特定的线要素来创建缓冲区。 **1.3 多边形图层的缓冲区分析** - **步骤**: 对于多边形图层...

    探讨Oracle数据缓冲区内部机制

    在Oracle 8i之前,新加载到缓冲区的数据块会自动放置到最近使用列表的前端,但自8i版本起,策略发生了变化,新数据缓冲区被插入到缓冲区链的中部,这是一个优化的策略,旨在提高数据缓冲的效率。 数据缓冲区的内部...

    S7-1200 使用诊断缓冲区-跟我学 FLASH视频.rar

    通过“诊断视图”,可以逐条浏览缓冲区中的事件,同时还可以设置过滤条件来筛选特定类型的事件。 学习如何解读诊断缓冲区中的信息是至关重要的。这包括识别错误代码,理解每个代码背后的含义,以及采取适当的纠正...

    D3D11程序框架

    3. **视图(View)与着色器(Shader)**:视图定义了数据如何被渲染,如深度缓冲区视图和纹理视图。着色器是编程阶段,包括顶点着色器、像素着色器、几何着色器等,它们控制图形的最终外观。 4. **资源管理...

    MFC双视图,带双缓冲的!

    而双缓冲则是先在内存中的一个缓冲区绘制完整个画面,然后再一次性将整个缓冲区的内容复制到屏幕上,这样就避免了中间过程的闪烁,提高了视觉效果。 结合描述中的“自己做的,大家可以看看!做来瞎玩的!嘿嘿~!~~~...

    Python库 | pyarrow-0.12.1-cp35-cp35m-macosx_10_6_intel.whl

    5. **内存缓冲区和缓冲区视图**:`pyarrow`实现了零拷贝的数据传输,通过`Buffer`对象和缓冲区视图,可以直接在内存中操作数据,避免了不必要的数据复制,提升了性能。 6. **计算API**:`pyarrow`提供了一个计算API...

    Oracle缓冲区忙等待的识别和解决

    总的来说,解决Oracle缓冲区忙等待问题需要综合运用各种性能分析工具和视图,对数据库的I/O操作进行深入分析,优化SQL语句,合理调整缓存大小,并根据等待事件的具体原因采取针对性的措施。通过这些方法,可以有效地...

    ArcGIS Engine缓冲区分析

    1. **CreateGraphicBuffersAroundSelectedFeatures方法**:该方法接收一个活动视图和一个距离参数,用于创建缓冲区。 2. **CleanRes_Click事件**:此事件用于清理当前状态,通常用于切换工具或重置地图状态。 3. **...

    有关Oracle数据缓冲区的内部机制剖析

    为了监控数据缓冲区的性能,Oracle提供了一个内部视图X$BH,包含数据块的使用时间和计数。通过查询X$BH,我们可以找到那些被频繁访问的“热数据块”,并将它们转移到KEEP缓冲池,以确保它们始终在内存中可用。 ...

Global site tag (gtag.js) - Google Analytics