异步编程java nio : buffer原理和intBuffer展示demo
以下是应用java nio中的 IntBuffer编写的一个示例demo:
public class IntBufferDemo {
private final static Integer NUM = 5 ;
public static void main(String[] args) {
// 分配buffer缓冲区
IntBuffer buffer = IntBuffer.allocate(1024);
// 往buffer中写入数据
for (int i=0;i<NUM; i){
buffer.put(i) ;
}
// 开始读buffer
buffer.flip() ;
while (buffer.hasRemaining()){
int data = buffer.get() ;
System.out.print(data " ");
}
}
}
运行的结果如下:
那么buffer缓冲区是怎么运行的呢?它的原理是什么?
在以上示例代码中使用到了 nio buffer中的 IntBuffer去进行一个简单的读写操作,通过put方法和get方法对buffer缓冲区中的内容进行更改,在缓冲区中有几个比较重要的属性,具体内容如下:
position
: 当前读写指针所在的位置capacity
:缓冲区的容量limit
:指出还有多少数据可以取出或者是还有多少数据可以放入缓冲区中去
缓存切片:
java nio有缓存切片的概念,缓存切片实际上就是对原有缓存的一个映射,相当于是原缓存的视图,并且与原缓存的数据是共享的:代码示例如下:
public class BufferSlice {
private final static Integer NUM = 9 ;
public static void main(String[] args) {
// 创建原缓冲区
ByteBuffer byteBuffer = ByteBuffer.allocate(10) ;
for (int i=0;i<=NUM;i ){
byteBuffer.put((byte) i) ;
}
// 分配一个新的缓存切片 3 --- 6
byteBuffer.limit(7);
byteBuffer.position(3) ;
ByteBuffer slice = byteBuffer.slice() ;
// 对缓存切片进行改造
for (int i=0;i<slice.capacity();i ){
byte d = slice.get(i);
d = (byte)(d*10) ;
slice.put(i,d) ;
}
// 从头开始读
byteBuffer.limit(byteBuffer.capacity());
byteBuffer.position(0);
while (byteBuffer.hasRemaining()){
System.out.print(byteBuffer.get() " ");
}
}
}
代码运行结果如下图所示:
可以看到,下标3到6的内容被更改
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhfiai
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13