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());
} }

NIO(一)的更多相关文章

  1. 源码分析netty服务器创建过程vs java nio服务器创建

    1.Java NIO服务端创建 首先,我们通过一个时序图来看下如何创建一个NIO服务端并启动监听,接收多个客户端的连接,进行消息的异步读写. 示例代码(参考文献[2]): import java.io ...

  2. BIO\NIO\AIO记录

    IO操作可以分为3类:同步阻塞(BIO).同步非阻塞(NIO).异步(AIO). 同步阻塞(BIO):在此种方式下,用户线程发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后, ...

  3. 支撑Java NIO 与 NodeJS的底层技术

    支撑Java NIO 与 NodeJS的底层技术 众所周知在近几个版本的Java中增加了一些对Java NIO.NIO2的支持,与此同时NodeJS技术栈中最为人称道的优势之一就是其高性能IO,那么我 ...

  4. Java I/O and NIO [reproduced]

    Java I/O and NIO.2---Five ways to maximize Java NIO and NIO.2---Build more responsive Java applicati ...

  5. JAVA NIO学习笔记1 - 架构简介

    最近项目中遇到不少NIO相关知识,之前对这块接触得较少,算是我的一个盲区,打算花点时间学习,简单做一点个人学习总结. 简介 NIO(New IO)是JDK1.4以后推出的全新IO API,相比传统IO ...

  6. Java NIO概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...

  7. JAVA NIO Socket通道

      DatagramChannel和SocketChannel都实现定义读写功能,ServerSocketChannel不实现,只负责监听传入的连接,并建立新的SocketChannel,本身不传输数 ...

  8. JAVA NIO FileChannel 内存映射文件

      文件通道总是阻塞式的. 文件通道不能创建,只能通过(RandomAccessFile.FileInputStream.FileOutputStream)getChannel()获得,具有与File ...

  9. java nio系列文章

    java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍   (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...

  10. (转)NIO与AIO,同步/异步,阻塞/非阻塞

    原文地址: http://www.cnblogs.com/enjoy-ourselves/p/3793771.html 1.flip(),compact(),与clear()的使用 flip()内部实 ...

随机推荐

  1. Coursera, Deep Learning 2, Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week1, Course

    Train/Dev/Test set Bias/Variance Regularization  有下面一些regularization的方法. L2 regularation drop out da ...

  2. Python 20 Ajax全套

    概述 对于web应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  3. 深度学习——深度神经网络(DNN)反向传播算法

    深度神经网络(Deep Neural Networks,简称DNN)是深度学习的基础. 回顾监督学习的一般性问题.假设我们有$m$个训练样本$\{(x_1, y_1), (x_2, y_2), …, ...

  4. C&C++动态分配内存(手动分配内存)三种方式

    1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...

  5. 【NLP CS224N笔记】Lecture 1 - Introduction of NLP

    I. 什么是NLP NLP全称是Natural Language Processing,即自然语言处理,这是一门计算机科学.人工智能以及语言学的交叉学科. NLP涉及的几个层次由下图所示.可以看到输入 ...

  6. [转载]tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定

    tf.ConfigProto()函数用在创建session的时候,用来对session进行参数配置: config = tf.ConfigProto(allow_soft_placement=True ...

  7. 统计分析与R软件-chapter2-4

    2.4 因子 统计中的变量有几中重要类别:区间变量.名义变量和有序变量.区间变量取连续的数值,可以进行求和.平均值等运算.名义变量和有序变量取离散值,可以用数值代表,也可以是字符型值,其具体数值没有加 ...

  8. ActiveMQ使用

    一.Windows安装ActiveMQ 1.下载解压 2.启动服务 二.Linux安装ActiveMQ 1.下载解压 2.启动访问 三.队列模式 1.创建maven项目 2.生产者 3.消费者 四.主 ...

  9. Deep Learning Tutorial - Convolutional Neural Networks(LENET)

    CNN很多概述和要点在CS231n.Neural Networks and Deep Learning中有详细阐述,这里补充Deep Learning Tutorial中的内容.本节前提是前两节的内容 ...

  10. POJ3580 SuperMemo splay伸展树,区间操作

    题意:实现一种数据结构,支持对一个数列的 6 种操作:第 x 个数到第 y 个数之间的数每个加 D:第 x 个数到第 y 个数之间全部数翻转:第 x 个数到第 y 个数之间的数,向后循环流动 c 次, ...