ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Netty:NIO buffer 原理(附 示例代码)

2021-11-16 13:05:13  阅读:150  来源: 互联网

标签:Netty NIO 示例 charBuffer System limit println position out


Java:NIO buffer 原理理解
NIO 是同步,非阻塞
NIO 和 BIO 最大不同在于
BIO是面向流的
NIO是面向块(缓冲区)的
NIO将文件或文件中的一段区域映射到内存中,可以像访问内存一样访问文件
那么今天我们打卡点知识就是 java NIO 中的 缓冲区接口 Buffer

Buffer
我们以 cahrBuffer为例子

在这里插入图片描述

capacity 总体容量大小
limit 存储容量的大小,是可读写和不可读写的界线
position 已读容量的大小,已读和未读区域的界线

【使用原理】
a) 初始化,给定总容量,position=0, limit=capacity
b) 当使用put方法存入数据是,通过position来记录存储的容量变化,position不断后移,直到存储结束(写完成)
c)写完成需要调用flip方法刷新,limit=position,position=0
保障limit记录的是可读写区域的大小,position已读部分重置为空
d) 读数据直到读完成,需要调用clear方法,position=0, limit=capacity

【示例代码】

public class BufferTest {
    public static void main(String[] args) {
        CharBuffer charBuffer = CharBuffer.allocate(8);
        System.out.println("=========初始化");
        System.out.println("capacity:" + charBuffer.capacity());
        System.out.println("position:" + charBuffer.position());
        System.out.println("limit:" + charBuffer.limit());
 
        System.out.println("=========存储");
        charBuffer.put('h');
        charBuffer.put('y');
        charBuffer.put('c');
        System.out.println("position:" + charBuffer.position());
        System.out.println("limit:" + charBuffer.limit());
 
        charBuffer.flip();
        System.out.println("=========调用flip");
        System.out.println("position:" + charBuffer.position());
        System.out.println("limit:" + charBuffer.limit());
 
        System.out.println("=========读取数据");
        //没有参数就是读取第一个,且会用 position 记录
        //有参数 不会使用position记录
        //System.out.println(charBuffer.get());
        //System.out.println(charBuffer.get(1));
        //遍历方法
        //while (charBuffer.hasRemaining()) {
        //    System.out.println(charBuffer.get());
        //}
        //标记
        charBuffer.mark();
        System.out.println(charBuffer.get());
        System.out.println("position:" + charBuffer.position());
 
        System.out.println(charBuffer.get());
        System.out.println("position:" + charBuffer.position());
 
        //回退到标记的 position
        charBuffer.reset();
        System.out.println("========调用reset方法");
        System.out.println(charBuffer.get());
        System.out.println("position:" + charBuffer.position());
        System.out.println("limit:" + charBuffer.limit());
 
        charBuffer.clear();
        System.out.println("=========调用clear");
        System.out.println("position:" + charBuffer.position());
        System.out.println("limit:" + charBuffer.limit());
    }
}

根据上述的执行原理,我们查看结果

img

到这里,今天的NIO 缓冲区的知识就打卡完毕咯

标签:Netty,NIO,示例,charBuffer,System,limit,println,position,out
来源: https://blog.csdn.net/doomwatcher/article/details/121353482

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有