此文介绍nio中ByteBuffer的特性之一,视图.

*view buffer概念

---把ByteBuffer转换为其他数据类型的buffer,比如char,long,float等,这样就方便处理连续的多字节情况

---相关的api,形如as*Buffer,如LongBuffer asLongBuffer()之类

*功能特性(ByteBuffer注释中"views"条目有详细的注解)

---视图和原ByteBuffer共享数据,但各自独立位置信息.

"Changes to the byte buffer's content
will be visible in the view buffer, and vice versa; the two buffers'
position, limit, and mark values are independent."

---view buffer的字节次序在创建时被确定

"The byte order of a view buffer is fixed to be that of its byte buffer
at the time that the view is created. "

---优点

方便处理大块数据

*api分析

以子类HeapByteBuffer中的实现方式为例,其他类型的实现方式相同

CharBuffer java.nio.HeapByteBuffer.asCharBuffer()public CharBuffer asCharBuffer() {int size = this.remaining() >> 1;  //char比byte多一个字节,容量/2int off = offset + position();  //offset从原buffer的position开始return (bigEndian? (CharBuffer)(new ByteBufferAsCharBufferB(this, //与原buffer共享数据-1,  //mark =-10,    //position =0size, //limit =sizesize, //compacity =sizeoff)) //offset =off: (CharBuffer)(new ByteBufferAsCharBufferL(this,-1,0,size,size,off)));
}
/*
*1.view buffer的数据内容是原buffer的remaining部分
*2.view buffer和原buffer保持相同的字节顺序
*/

*测试示例

示例ViewBufferTest/*** Feb 16, 2011 by dzh*/
package buffer.view;import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.CharBuffer;/*** @author dzh**/
public class ViewBufferTest {public static void main(String[] args) {ByteBuffer byteBuf =ByteBuffer.allocate(6).order(ByteOrder.BIG_ENDIAN);byteBuf.put((byte) 0).put((byte) 'A').mark();byteBuf.put(new byte[]{0,'B',0,'C'}).reset();CharBuffer charBuf =byteBuf.asCharBuffer();System.out.println(byteBuf.toString());  //java.nio.HeapByteBuffer[pos=2 lim=6 cap=6]System.out.println(charBuf.toString());  //BC}}

转载于:https://www.cnblogs.com/bronte/articles/1955914.html

nio~view buffer相关推荐

  1. 【Netty】NIO 缓冲区 ( Buffer ) ( 缓冲区读写类型 | 只读缓冲区 | 映射字节缓冲区 )

    文章目录 I . 缓冲区 ( Buffer ) 存取类型 II . 只读缓冲区 ( ReadOnlyBuffer ) III . 映射字节缓冲区 ( MappedByteBuffer ) I . 缓冲 ...

  2. java buffer nio_Java NIO之Buffer(缓冲区)入门

    ​Java NIO中的缓存区(Buffer)用于和通道(Channel)进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中的. ​缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内 ...

  3. 反射 Nio channel Buffer

    1.反射     1.反射的简介         java的反射机制 在运行状态中 对于任意一个类 都能知道任意一个类的所有属性和方法         对于任意一个对象 都能够调用它的任意一个属性和方 ...

  4. buffer java作用_Java NIO之Buffer的使用

    目录 Buffer简介 Buffer的核心属性 Buffer的创建与使用(ByteBuffer为例) 总结 参考资料 Buffer简介 缓冲区(Buffer):本质上是一个数组,用于临时保存.写入以及 ...

  5. 【Netty】NIO 缓冲区 ( Buffer ) 分散 Scattering 与 聚合 Gathering 操作

    文章目录 I . 缓冲区 ( Buffer ) 分散 Scattering 与 聚合 Gathering 概念 II . 缓冲区 ( Buffer ) 分散 Scattering 与 聚合 Gathe ...

  6. 【Netty】NIO 缓冲区 ( Buffer ) 组件

    文章目录 I . NIO 三大核心组件 对应关系 II . 缓冲区 ( Buffer ) 类 III . 缓冲区 ( Buffer ) 机制 IV . 缓冲区 ( Buffer ) 机制 示例解析 V ...

  7. NIO的Buffer

    package com.atguigu.nio;import java.nio.IntBuffer;public class BasicBuffer {public static void main( ...

  8. NIO 之 Buffer 图解

    可参考之前的文章:NIO 之 ByteBuffer实现原理 下面是对之前文章的一个补充 Buffer 类 结构 对于每个非布尔原始数据类型都有一个缓冲区类.尽管缓冲区作用于它们存储的原始数据类型,但缓 ...

  9. Java NIO:Buffer、Channel 和 Selector

    Buffer 一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据. java.nio 定义了以下几个 Buffer 的实现,这个图读者应该也在不少地方见过了吧 ...

最新文章

  1. RANSAC回归的鲁棒性
  2. oracle存储过程、声明变量、for循环|转|
  3. 解决javah生成c头文件时找不到android类库的问题
  4. 如何使用Microsoft技术栈
  5. VTK:InfoVis之ArrayToTable
  6. php dom 丢失内容,PHP DOMDocument缺失
  7. 安装与设置Visual SVN
  8. layui 可以商用吗_layui框架的优缺点是什么
  9. Composite(组合)
  10. DOE软件测试工资,如何进行实验设计(DOE)
  11. 【VBA】日期时间函数总结(全)
  12. MySQL Workbench生成数据表关系图
  13. win10一键卸载所有自带应用
  14. 【听】实验室女孩,热爱到至爱的科学狂人
  15. 招人厌的 10 种男人
  16. VCIP 2020:面向VVC的自适应分辨率改变
  17. 解决:XP系统sfc /scannow RPC不可用 错误 0x000006ba
  18. Scala中拆分操作partition、grouped、groupBy和sliding函数
  19. 《毛毛虫组》【Alpha】Scrum meeting 2
  20. 2000-2019年各省市场化指数(樊纲、王小鲁)

热门文章

  1. candence 16.6 win8.1 x64 破解
  2. mysql安装图解_MySQL安装图解
  3. centos php 开启libgdgd_CentOS6.6下yum安装PHP的gd库失败?-问答-阿里云开发者社区-阿里云...
  4. python的open方法_Python os.open() 方法
  5. 带通滤波器作用和用途_带通滤波器的作用和电路设计图
  6. linux用光盘作yum源实验步骤,Linux使用系统光盘作为YUM源
  7. exe编辑器_【小功能】Unreal Editor中调用exe
  8. c语言音像图书管理系统设计,c语言--图书管理系统
  9. java外挂源码_2.7 万 Star!Github 项目源码辅助阅读神器
  10. Unity C# Job System介绍(二) 安全性系统和NativeContainer