当前位置: 首页 > news >正文

公司微信网站开发平台h5响应式网站建设报价

公司微信网站开发平台,h5响应式网站建设报价,网站建设服务商推荐,宁波网站推广优化公司文章目录 PreOverview状态变量概述PositionLimitCapacity演示: 观察变量 访问方法get() 方法put()方法类型化的 get() 和 put() 方法 缓冲区的使用:一个内部循环 Pre 庖丁解牛:NIO核心概念与机制详解 01 接下来我们来看下缓冲区内部细节 Ov…

文章目录

  • Pre
  • Overview
  • 状态变量
    • 概述
    • Position
    • Limit
    • Capacity
    • 演示: 观察变量
  • 访问方法
    • get() 方法
    • put()方法
    • 类型化的 get() 和 put() 方法
  • 缓冲区的使用:一个内部循环

在这里插入图片描述


Pre

庖丁解牛:NIO核心概念与机制详解 01


接下来我们来看下缓冲区内部细节

Overview

接下来将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor)

状态变量是"内部统计机制"的关键。每一个读/写操作都会改变缓冲区的状态。通过记录和跟踪这些变化,缓冲区就可能够内部地管理自己的资源。

在从通道读取数据时,数据被放入到缓冲区。在有些情况下,可以将这个缓冲区直接写入另一个通道,但是在一般情况下,您还需要

  • 查看数据。这是使用 访问方法 get() 来完成的。
  • 同样,如果要将原始数据放入缓冲区中,就要使用访问方法 put()。

状态变量

概述

可以用三个值指定缓冲区在任意时刻的状态:

  • position
  • limit
  • capacity

这三个变量一起可以跟踪缓冲区的状态和它所包含的数据。

我们将详细分析每一个变量,还要介绍它们如何适应典型的读/写(输入/输出)进程。在这个例子中,我们假定要将数据从一个输入通道拷贝到一个输出通道


Position

可以回想一下,缓冲区实际上就是美化了的数组。在从通道读取时,将所读取的数据放到底层的数组中。 position 变量跟踪已经写了多少数据。更准确地说,它指定了下一个字节将放到数组的哪一个元素中。

因此,如果从通道中读三个字节到缓冲区中,那么缓冲区的 position 将会设置为3,指向数组中第四个元素。

同样,在写入通道时,是从缓冲区中获取数据。 position 值跟踪从缓冲区中获取了多少数据。更准确地说,它指定下一个字节来自数组的哪一个元素。因此如果从缓冲区写了5个字节到通道中,那么缓冲区的 position 将被设置为5,指向数组的第六个元素。


Limit

limit 变量表明还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。

position 总是小于或者等于 limit。


Capacity

缓冲区的 capacity 表明可以储存在缓冲区中的最大数据容量。实际上,它指定了底层数组的大小 ― 或者至少是指定了准许我们使用的底层数组的容量。

limit 决不能大于 capacity。


演示: 观察变量

我们首先观察一个新创建的缓冲区。 我们假设这个缓冲区的 总容量 为8个字节。

在这里插入图片描述

图给你画好了,戳这里


访问方法

到目前为止,我们只是使用缓冲区将数据从一个通道转移到另一个通道。然而,程序经常需要直接处理数据。例如,可能需要将用户数据保存到磁盘。在这种情况下,必须将这些数据直接放入缓冲区,然后用通道将缓冲区写入磁盘。

或者,可能想要从磁盘读取用户数据。在这种情况下,要将数据从通道读到缓冲区中,然后检查缓冲区中的数据。

get() 方法

在这里插入图片描述

ByteBuffer 类中有四个 get() 方法:

1byte get();
2ByteBuffer get( byte dst[] );
3ByteBuffer get( byte dst[], int offset, int length );
4byte get( int index );
  • 第一个方法获取单个字节。
  • 第二和第三个方法将一组字节读到一个数组中。
  • 第四个方法从缓冲区中的特定位置获取字节。

那些返回 ByteBuffer 的方法只是返回调用它们的缓冲区的 this 值。

此外,我们认为前三个 get() 方法是相对的,而最后一个方法是绝对的。 相对 意味着 get() 操作服从 limitposition 值 ― 更明确地说,字节是从当前 position 读取的,而 positionget 之后会增加。

另一方面,一个 绝对 方法会忽略 limitposition 值,也不会影响它们。事实上,它完全绕过了缓冲区的统计方法。

上面列出的方法对应于 ByteBuffer 类。其他类有等价的 get() 方法,这些方法除了不是处理字节外,其它方面是是完全一样的,它们处理的是与该缓冲区类相适应的类型。


put()方法

在这里插入图片描述
ByteBuffer 类中有五个 put() 方法:

1ByteBuffer put( byte b );
2ByteBuffer put( byte src[] );
3ByteBuffer put( byte src[], int offset, int length );
4ByteBuffer put( ByteBuffer src );
5ByteBuffer put( int index, byte b );
  • 第一个方法 写入(put) 单个字节。
  • 第二和第三个方法写入来自一个数组的一组字节。
  • 第四个方法将数据从一个给定的源 ByteBuffer 写入这个 ByteBuffer
  • 第五个方法将字节写入缓冲区中特定的 位置 。那些返回 ByteBuffer 的方法只是返回调用它们的缓冲区的 this 值。

get() 方法一样,我们将把 put() 方法划分为 相对 或者 绝对 的。前四个方法是相对的,而第五个方法是绝对的。

上面显示的方法对应于 ByteBuffer 类。其他类有等价的 put() 方法,这些方法除了不是处理字节之外,其它方面是完全一样的。它们处理的是与该缓冲区类相适应的类型。


类型化的 get() 和 put() 方法

除了前些小节中描述的 get()put() 方法, ByteBuffer 还有用于读写不同类型的值的其他方法。

在这里插入图片描述

如下所示:

getByte()
getChar()
getShort()
getInt()
getLong()
getFloat()
getDouble()
putByte()
putChar()
putShort()
putInt()
putLong()
putFloat()
putDouble()

事实上,这其中的每个方法都有两种类型 ― 一种是相对的,另一种是绝对的。它们对于读取格式化的二进制数据(如图像文件的头部)很有用。

举个栗子

public class TypesInByteBuffer
{static public void main( String args[] ) throws Exception {ByteBuffer buffer = ByteBuffer.allocate( 64 );buffer.putInt( 30 );buffer.putLong( 7000000000000L );buffer.putDouble( Math.PI );buffer.flip();System.out.println( buffer.getInt() );System.out.println( buffer.getLong() );System.out.println( buffer.getDouble() );}
}

缓冲区的使用:一个内部循环

下面的内部循环概括了使用缓冲区将数据从输入通道拷贝到输出通道的过程

while (true) {buffer.clear();int r = fcin.read( buffer );if (r==-1) {break;}buffer.flip();fcout.write( buffer );
}
  • read()write() 调用得到了极大的简化,因为许多工作细节都由缓冲区完成了。
  • clear()flip() 方法用于让缓冲区在读和写之间切换。
    在这里插入图片描述
http://www.yayakq.cn/news/417907/

相关文章:

  • 房产网站代运营WordPress主题会包含木马吗
  • 新闻聚合网站开发 技术用织梦做的网站怎么上传虚拟
  • 关于开展网站建设工作的通知网站开发程序员招聘
  • 网站定制费用自助下单网站
  • 千灯做网站免费下软件的网站
  • 延吉市住房城乡建设局网站建设企业网站内容
  • 企业模板网站vue让互联网之光点亮生活
  • 网站站长网站后台功能技术要求
  • 网站制作内容取名字大全免费查询
  • php网站建设管理教材wordpress如何添加搜索到主菜单
  • 电影网站模板下载网站建设最低多少钱
  • 站长推荐网址入口自动跳转营销网站制作郑州
  • 网站开发工作前景马关网站建设
  • 哪个网站做免费小程序域名注册是什么意思呢
  • 珠海斗门建设局网站做网站文字编辑工作好不好
  • 河北建设执业资格注册中心网站超市如何建立网站
  • 可信的专业网站建设免费推广网站大全网
  • 嘉兴网站建设哪家好新云网站模版
  • 郑州做供暖的公司网站软件接单
  • 小米手表网站24小时自助下单网站
  • 源码交易网站青岛网站推广方案
  • 凡科网怎么建网站黔西南做网站的有几家
  • 徐汇郑州阳网站建设舆情分析研判报告
  • 司瓦图网站物流公司网站方案
  • 网站开发职业规划中国建筑装饰网王凤波
  • 如何做网站里的子网站wordpress正文标题样式
  • 网站建设高级 上海沈阳妇科医院哪家好
  • 苏州微信网站建设wordpress免费cms主题
  • 衡阳网站建设公司wordpress主题justnews
  • 网站交互主要做什么的seo数据是什么