Java New IO 简称 nio,在jdk1.4提供了新的api,有如下特性:

1.为所有原始类型提供缓存支持

2.字符集编解码解决方案

3.Channel:新的原始io抽象

4.支持锁和内存映射的访问接口

5.提供多路(non-bloking)非阻塞式多路高伸缩性网络io

nio的两个创新:

缓冲区

通道

原始io与nio比较:

1.原始java.io.*包库与nio最重要的区别是数据打包和传输方式,io中使用流的方式处理数据,nio中使用块的方式处理数据。

流:流方式处理数据是输入一个字节,输出一个字节。处理比较慢

块:块的方式处理数据每步操作产生或者消费一个数据块,处理速度快。

数据缓冲区:

找了个博客,里面有比较详细的介绍,就不写了http://www.cnblogs.com/chenpi/p/6475510.html

api测试:

package com.gengsc.buffer;

import java.nio.IntBuffer;
import java.util.Arrays; import javax.swing.ButtonGroup; /**
* @author shichaogeng
*
* 2017年7月12日
*/
public class BufferTest { public static void main(String[] args) { //创建指定长度的缓冲区
IntBuffer buffer = IntBuffer.allocate(); //使用数组创建缓冲区数组
int[] arr = {, , };
//未修改缓冲区之前的数组
System.out.println("未修改缓冲区之前的数组: ");
System.out.println(Arrays.toString(arr));
buffer = buffer.wrap(arr); //使用offset
buffer = buffer.wrap(arr, , ); //修改元素位置
buffer.put(, ); //遍历缓冲区数组
System.out.println("缓冲区数组如下: ");
for (int i = ; i < buffer.limit(); i++) {
System.out.println(buffer.get());
} System.out.println("原始数据: ");
System.out.println(Arrays.toString(arr)); buffer.clear();
buffer.flip();
System.out.println(buffer); System.out.println(buffer.duplicate());
}
}

通道:

通道(channel)用于字节缓冲区与通道另一侧实体(文件或者套接字)有效的传输数据。

两种通道:

File通道 FileChannel

  FileChanel只能通过file对象调用getChannel获取

Scoket通道 SocketChannel SocketServerChannel DatagramChannel

通道分为单向(unidirectionnal)和双向(bidirectional)的

实现WritableByteChannel的write方法和实现ReadableByteChannel的read方法,那么它是一个单向通道。

同时实现上述两个接口的类就是双向通道。

通道的阻塞和非阻塞:

非阻塞模式(no-blocking)永远不会让调用的线程休眠。请求操作要么立即返回,要么返回结果表明未进行操作。只有面向流的通道,sockets和pipes才使用非阻塞通道。

JavaNIO的更多相关文章

  1. javaNIO(转载)

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

  2. JAVANIO通道

    package com.nio.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...

  3. javaNIO核心概念

    在java的阻塞IO中使用InputStream和outputStream来进行输入和输出,那么两种流是相互独立使用的,而且每次数据传输都要通过“用户态数据”向“os内核态数据”copy或从“os内核 ...

  4. javaNIO学习

    Buffer其实就是是一个容器对象,它包含一些要写入或者刚读出的数据.在NIO中加入Buffer对象,体现了新库与原I/O的一个重要区别.在面向流的I/O中,您将数据直接写入或者将数据直接读到Stre ...

  5. javaNIO是什么?由那几部分组成?各部分的作用。

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

  6. JavaIO和JavaNIO

    BIO和NIO BIO在之前的服务器处理模型中,在调用ServerSocket.accept()方法时,会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会accept一个新连接,接着启 ...

  7. JavaNIO之Channel

    Channel的本质是通道,用来连接JVM之外数据向JVM内传输数据,比如来自于硬盘的文件,来自于网络的数据包.JVM之外的数据就是通过Channel进行数据传输:如果把Channel比作河道,那么作 ...

  8. (基础篇 走进javaNIO)第二章-NIO入门

    在本章巾,我们会分别对 JDK 的BIO ,NIO 和JDK 1.7 最新提供的 NI02.0的使用进行详细说明 ,通过流程图和代 码讲解,让大 家体会到随着 Ja va 1/0 类库的 不断发展和改 ...

  9. (基础篇 走进javaNIO)第一章-java的i/o演进之路

    Java 是由 SUN公司在 1995 年首先发布 的编程语 言和计算平 台.这基础技术 支持最新 的程序 ,包括 实用程序 .游 戏和业 务应用程序 .J ava 在世界各地 的 8.5  亿 多 ...

  10. JavaNIO深入学习

    NIO是Jdk中非常重要的一个组成部分,基于它的Netty开源框架可以很方便的开发高性能.高可靠性的网络服务器和客户端程序.本文将就其核心基础类型Channel, Buffer, Selector进行 ...

随机推荐

  1. 常用javaScript小常识

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  2. influxDB使用小结

    在集群中安装influxdb influxdb提供了官方镜像,因此在集群中安装influxdb十分方便,只需要指定镜像名为influxdb即可自动下载运行,只需要配置环境变量就可以进行初始化设置 以下 ...

  3. 我非要捅穿这 Neutron(三)架构分析与代码实现篇(基于 OpenStack Rocky)

    目录 文章目录 目录 Neutron 的软件架构分析与实现 Neutron Server 启动流程 获取 WSGI Application Core API & Extension API C ...

  4. linux使用du查看文件夹大小

    du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du –sh -s不显示该目录下面的文件大小,只显示该目录的大小 -h以人类可读的方式显示. 比如显示work下面的Apache-tom ...

  5. Elastic search中使用nested类型的内嵌对象

    在大数据的应用环境中,往往使用反范式设计来提高读写性能. 假设我们有个类似简书的系统,系统里有文章,用户也可以对文章进行赞赏.在关系型数据库中,如果按照数据库范式设计,需要两张表:一张文章表和一张赞赏 ...

  6. Blender2.8基础操作

    1.Blender2.8版本快捷键方式和2.79b大致相同.2.Blender2.8操作视图的方式可以按住主键盘数字键1旁边的~符号键,然后鼠标选择需要的视图. 3.视图与基本操作: 选择方式时鼠标左 ...

  7. 关于FPS游戏的设计问题

    第一个想到的问题: 首先以unity的FPSCharactorController为例,这里规定,相机的方向中心一定是瞄准的方向中心.设置身体的扭曲朝向相机方向,这样身体可以弯腰.你们看图中,我让玩家 ...

  8. 【LeetCode】123、买卖股票的最佳时机 III

    Best Time to Buy and Sell Stock III 题目等级:Hard 题目描述: Say you have an array for which the ith element ...

  9. lua基础学习(二)

    一,Lua变量   1.lua变量的三种类型:全局变量,局部变量,表中的域 Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量. 局部变量的作用域为从声明位置 ...

  10. 开启sentry权限控制hue

    参考: cloudera官方授权:包括webui, ldap,sentry https://www.cloudera.com/documentation/enterprise/6/6.2/topics ...