java NIO关于*Buffer的 flip | reset | rewind | clear 的灵活使用备忘
2017-09-03 11:55
1071 查看
首先对于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 方法: 重新转换为写状态【把四个状态变量都变为初始状态】(这时候读没有任何意义)
写完才发现好像根本没有必要发。。。但是还是发了吧。。。。。。。。。。。。。。。。。。。。。。。。
有两种状态:
读 || 写
四个重要的属性:
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 方法: 重新转换为写状态【把四个状态变量都变为初始状态】(这时候读没有任何意义)
写完才发现好像根本没有必要发。。。但是还是发了吧。。。。。。。。。。。。。。。。。。。。。。。。
相关文章推荐
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer的flip、rewind和compact几个方法的区分使用
- buffer中clear rewind flip的区别
- byteBuffer, clear(), flip(), rewind(), allocate(), allocateDirect()
- java的NIO包中ByteBuffer类的clear(),flip(),rewind()方法的意思
- Java NIO之Buffer中flip()、rewind()、clear()方法解析
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer 以及flip,clear及rewind区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer 以及flip,clear及rewind区别
- (1.28)java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- ByteBuffer的flip clear及rewind区别
- java.nio.ByteBuffer的flip、rewind和compact几个方法的区分使用 (转载)
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- java.nio.ByteBuffer中flip、rewind、clear
- ByteBuffer的flip,rewind,clear问题