JAVA Nio编程 - Buffer

NIO 基本介绍

前面我们看到了Bio,不讲武德,浪费资源。Nio要好很多,人家知道节约粮食。
1、从jdk 1.4开始,引入了Nio,Nio的N有人解释为New,也有人解释为 No - blocking,都对。它是一个同步非阻塞的。相对于Bio是一个新的io,也是一个非阻塞的io。
2. 一般都在包,java.nio下。
3. Nio的核心,通道,缓冲区,选择器。
4. 它是面向缓冲区编程的。
5. 为什么讲bio不讲武德,因为现在有50个请求过来了,bio是给50个线程去处理的。而nio可能1个线程搞定,当没有任务的时候,它啥也不干,但是有任务了,他就立马干,不会堵在那里,非要等。

完善一个nio的图
在这里插入图片描述
1、每一个通道都会对应一个缓冲区
2、一个选择器可以对应多个通道
3、切到哪个通道是由事件决定的
4、Buffer底层是数组
5、在Bio中,一个流只能干一件事,例如:读、写。没听过那个类可以又读又写。但是NIO只要一个反转,我本来在写,反转之后就可以读。

通道和缓存区是双向的!!!
通道和缓存区是双向的!!!
通道和缓存区是双向的!!!
注意!!!如果有箭头,就是双向箭头。

NIO和BIO对比

也看到了,BIO用流读取数据,而NIO用缓冲区读取,效率肯定高。
BIO阻塞的,NIO非阻塞
BIO基于字符流和字节流读取数据的,而NIO则是用通道和缓冲区配合的。从通道读取到缓冲区,从缓冲区可以写到通道。而选择器类似于一种监听器。所以能协调好。

Buffer缓冲区

Buffer初体验

	public static void main(String[] args) {
		// 指定空间
		IntBuffer buffer = IntBuffer.allocate(10);
		// 存放(写)数据
		for (int i = 0; i < 10; i++) {
			buffer.put(i * 3);
		}
		// 反转
		buffer.flip();
		// 拿取(读)数据
		while (buffer.hasRemaining()){
			System.out.println(buffer.get());
		}
	}

很简单,放几个读几个,但是得反转,不然读不了。

基本介绍

我们上一个点跑了一个demo,现在Buffer缓冲区隆重登场,介绍一下这个玩意。
这玩意其实就是我们内存中一个可以读可以写的一个内存块而已。这里面类似于我们的CHM,定义了一些指针啊,记录器啊之类的乱七八糟的。但是复杂程度远远不如CHM。CHM的源码我读了有5天才勉强知道他要干啥,太难了!!!吐槽一下。我们的通道,读写必须经过缓冲区!!!
Buffer有IntBuffer,LongBuffer等其中子类(最常用),除了没有布尔Buffer其他都有。其实我们都可以用ByteBuffer代替。
在这里插入图片描述

这四位大哥,是Buffer及其子类中最重要的四位。

分别是标记、位置、终点、容量。

重要的方法无非就这几个:
在这里插入图片描述

结束语

其实把Buffer领出来单讲没多少东西,无非就是一个能读能写的内存块。就是个数组。里面的几个指针,更简单了,我往里面放几个数。0 1 2 3 4 5 放完了,那终点不就是5 此时指针的位置在5,现在我要读了,反转一下,指针位置变成0,其他不变,然后一个个往前拨动指针,就这点东西。

再见再见再见再见再见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值