zoukankan      html  css  js  c++  java
  • NIO(一)

    1、NIO是什么?

      是JDK1.4之后推出的一个新的IO操作(netty、mina通讯框架的底层都是NIO实现的连接)

    2、NIO和IO的区别(阻塞只会出现在网络通讯中,都是同步)

      NIO:非阻塞类型No-block-IO,通过Channel(通道)+Buffer(缓冲区)实现IO操作,NIO为双向缓冲流;数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中;

         等服务器把数据加载完过后,再去读取

      IO:阻塞类型block-IO,传统IO为单向(输入流和输出流只能执行一个)

       如果网络传输很慢,程序就会一直等待,直到传输完为止

    注:JDKS1.7之后,优化:

      同步非阻塞:NIO(只有一个客户端去获取)

      异步非阻塞:AIO(可以多个客户端去获取)

    3、创建测试类(NIOBufferDemo)

    package com.cppdy.nio;
    
    import java.nio.ByteBuffer;
    
    public class NIOBufferDemo {
    
        public static void main(String[] args) {
    
            ByteBuffer buf = ByteBuffer.allocate(1024);
    
            System.out.println("初始化之后的信息:");
            // 当前指针位置
            System.out.println("position:" + buf.position());
            // 当前缓冲区已有的数据大小(首先要打开缓冲区)
            System.out.println("limit:" + buf.limit());
            // 缓冲区最大容量
            System.out.println("capacity" + buf.capacity());
    
            // 放入5个
            buf.put("cppdy".getBytes());
            System.out.println("放入值之后:");
            System.out.println("position:" + buf.position());
            System.out.println("limit:" + buf.limit());
            System.out.println("capacity" + buf.capacity());
    
            System.out.println("开启读之后的效果:");
            // 开启读
            buf.flip();
            System.out.println("position:" + buf.position());
            System.out.println("limit:" + buf.limit());
            System.out.println("capacity" + buf.capacity());
    
            byte[] bytes = new byte[buf.limit()];
            buf.get(bytes);
    
            System.out.println("获取到的值:" + new String(bytes, 0, bytes.length));
    
            System.out.println("获取值之后的效果:");
            System.out.println("position:" + buf.position());
            System.out.println("limit:" + buf.limit());
            System.out.println("capacity" + buf.capacity());
    
            System.out.println("开启重复读之后的效果:");
            buf.rewind();
            System.out.println("position:" + buf.position());
            System.out.println("limit:" + buf.limit());
            System.out.println("capacity" + buf.capacity());
    
            System.out.println("清空缓冲区之后的效果:");
            // 调用clear方法之后其实不是真正的清空缓冲区,只是把所有的信息复原而已
            buf.clear();
            System.out.println("position:" + buf.position());
            System.out.println("limit:" + buf.limit());
            System.out.println("capacity" + buf.capacity());
            System.out.println("值:" + (char) buf.get());
        }
    
    }
  • 相关阅读:
    大熊君JavaScript插件化开发------(第二季)
    大熊君JavaScript插件化开发------(第一季)
    大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)
    大熊君大话NodeJS之 ------ Connect中间件第二季(源码分析)
    大熊君大话NodeJS之------Connect中间件模块(第一季)
    大熊君大话NodeJS之------MongoDB模块(额外篇)
    大熊君大话NodeJS之------(Url,QueryString,Path)模块
    The SSL certificate used to load resources from xxx will be distrusted in M70.
    理解ios 11中webview的视口
    谨慎升级到HTTPS
  • 原文地址:https://www.cnblogs.com/jiefu/p/10035966.html
Copyright © 2011-2022 走看看