java NIO关于*Buffer的 flip | reset | rewind | clear 的灵活使用备忘

news/2024/7/16 8:52:13

首先对于Buffer的理解:

有两种状态:

读 || 写 

四个重要的属性:

capacity: 【Buffer实例最大容量,不可变】

limit: 【Buffer实例最大 {可写 |  可读 } 的值,在写模式下,默认与初始化 给定的 capacity 相等】

position:【在读 || 写 状态下,初始为0, 每 读||写 N个元素,positon+=N 。】

mark: 【position的辅助变量,要显示的调用mark方法来记录最近一次position的位置】



1.flip 方法使用场景:当生产者向Buffer中写入了内容而消费者想要读取的情况

在首次创建Buffer时,buffer实例处于写模式

这四个变量的值依次初始:

mark = -1
position = 0
limit = capacity
capacity = 初始给定


这时调用

channel.read(buffer)

buffer.put*(basicType)  


可以往buffer里写入相应的数据,这时候四个重要属性:

mark = -1
position = 相应写入的数量,最大不能超过limit
limit = capacity
capacity = 初始给定

现在要读取写入的内容,要转换为读状态(更改这四个状态变量)

这时候需要调用 flip() 方法

limit = position; //读取不超过limit内容
position = 0;  //要从position处读取
mark = -1;


现在就可以调用相应的操作来从buffer中读取相应的类容

例子:

while(buf.hasRemaining()){
	System.out.print((char) buf.get());
}


2.reset 方法:把mark备忘的position赋值给position变量


3.rewind 方法:只把position置为0,也就是在读 || 写 状态下,都可以重新开始读 或 写 ,其他变量保持不变


4. clear 方法: 重新转换为写状态【把四个状态变量都变为初始状态】(这时候读没有任何意义)


写完才发现好像根本没有必要发。。。但是还是发了吧。。。。。。。。。。。。。。。。。。。。。。。。




http://www.niftyadmin.cn/n/4557697.html

相关文章

要看什么书 全国计算机二级考试C语言类初了C语言还要考些什么

1 另一类是数据库程序设计(Visual )自选一类参加考试http://www.examda.com/ncre/Dynamic/dagang/20070308/145902533.html 二级定位为计算机程序员 一类是语言程序设计(C、C、Java、Visual Basic、Delphi) 学高等教育出版社的《公共基础知识》机试的环境是vc6.0 去年改的以前用…

我对于 JDK中 BIO/NIO/AIO 的理解

BIO/NIO/AIO名字的具体含义:BIO:Bloking IO (同步,阻塞IO)NIO:Non-bloking IO (同步,非阻塞IO{由于是在nio包下,称为NIO1 jdk1.6})AIO&#xff1a…

在C#中 如何实现Repeater分页

page" Convert.ToString(currentpage 1); } else { hlnextpage.Enabled false; } //转到首页 if (pds.CurrentPageIndex 要 (fldName 0) AS fldName 这样处理;输入参数:tblName: 表名 strGetFields: 需要返回的列 *:返回所以列信息PageSize: 页…

C语言提问

用100钱买100只鸡 %11d是控制输出为一个整形11位的数 答案只有一个 就是买100只 1钱的小鸡其他的根本100钱买不到100只鸡 以此类推 例如i12345则输出2345 %7d是控制输出为一个整形7位的数 %4d是控制输出为一个整形4位的数 ||| 这道题是否有问题

请给我简单介绍一下计算机二级C语言是什么

考试内容一、C语言程序的结构1. 程序的构成 能够编写简单的C程序 具有良好的程序设计风格3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序4. 在VisualC6.0集成环境下 满分100分上机操作包括:(1)填空;(2&…

【题集】51nod 基础题

1000 A B 不说话。 1 #include<bits/stdc.h>2 using namespace std;3 4 int main()5 {6 int a,b;7 cin>>a>>b;8 cout<<ab<<endl;9 return 0; 10 } View Code1005 大数加法 Java BigInteger。 1 import java.util.*;2 import ja…

求C语言运行环境下载

||| 学习一门语言尤其是初学 tc编译器最经典了... ||| http://www.skycn.com/soft/8959.html这个是下载的地址 &#xff5e; 这样不至于使你离开软件什么都想不起来~ ||| DEV c 和VC6.0 都行 上网上搜一下devc凡是能编c的都能编c ||| c语言的话 习惯于使用txt文本誊写 养成良好…

c语言软件怎么下载

也在用这个.. http://down.juntuan.net/gzjt1999mmm/loveword/Microsoft.rar ||| 我用的是DEV-c4.9.9.2 你要要的话 我发给你呀QQ781920613 ||| 建议用 vc 6.0 如果是想考级的话 现在考试也是要求在这个环境下需要的换 可以留下邮箱 我传给你 我推荐这个 也支持C语言的 在windo…