JavaNIO
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的更多相关文章
- javaNIO(转载)
(一) Java NIO 概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Chan ...
- JAVANIO通道
package com.nio.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...
- javaNIO核心概念
在java的阻塞IO中使用InputStream和outputStream来进行输入和输出,那么两种流是相互独立使用的,而且每次数据传输都要通过“用户态数据”向“os内核态数据”copy或从“os内核 ...
- javaNIO学习
Buffer其实就是是一个容器对象,它包含一些要写入或者刚读出的数据.在NIO中加入Buffer对象,体现了新库与原I/O的一个重要区别.在面向流的I/O中,您将数据直接写入或者将数据直接读到Stre ...
- javaNIO是什么?由那几部分组成?各部分的作用。
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...
- JavaIO和JavaNIO
BIO和NIO BIO在之前的服务器处理模型中,在调用ServerSocket.accept()方法时,会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会accept一个新连接,接着启 ...
- JavaNIO之Channel
Channel的本质是通道,用来连接JVM之外数据向JVM内传输数据,比如来自于硬盘的文件,来自于网络的数据包.JVM之外的数据就是通过Channel进行数据传输:如果把Channel比作河道,那么作 ...
- (基础篇 走进javaNIO)第二章-NIO入门
在本章巾,我们会分别对 JDK 的BIO ,NIO 和JDK 1.7 最新提供的 NI02.0的使用进行详细说明 ,通过流程图和代 码讲解,让大 家体会到随着 Ja va 1/0 类库的 不断发展和改 ...
- (基础篇 走进javaNIO)第一章-java的i/o演进之路
Java 是由 SUN公司在 1995 年首先发布 的编程语 言和计算平 台.这基础技术 支持最新 的程序 ,包括 实用程序 .游 戏和业 务应用程序 .J ava 在世界各地 的 8.5 亿 多 ...
- JavaNIO深入学习
NIO是Jdk中非常重要的一个组成部分,基于它的Netty开源框架可以很方便的开发高性能.高可靠性的网络服务器和客户端程序.本文将就其核心基础类型Channel, Buffer, Selector进行 ...
随机推荐
- mysql数据库简单补充
1.只有拥有特定权限的用户才能执行特定的操作.就好像我们在现实生活中,一般没有权利进入军事禁区,除非我们被某个很有权利并且可以指定其他人进入军事基地的人赋予了进入军事禁区的权利. 命令: GRANT ...
- leetcode23 合并k个排序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制
创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Auto ...
- 阶段3 2.Spring_01.Spring框架简介_05.spring的优势
- MM相关号码范围IMG设定
一.定义各物料类型的号码范围——MMNR 路径:後勤系統 - 一般 > 物料主檔> 基本設定 > 物料類型 >定義各物料類型的號碼範圍 2.定义供应商主档记录号码范围——OMS ...
- ffmpeg Tesseract-OCR 识别文字滤镜 中文识别输出文本
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=in.tif,ocr=datapath=tessdata ...
- python 爬取动态数据
按照:https://dryscrape.readthedocs.io/en/latest/installation.html 安装dryscrape 以下是简单实现 import dryscrape ...
- AJAX中同步和异步的区别和使用场景
一.简介Ajax请求最重要的问题是代码执行的顺序.最长遇到的问题是,我们定义一个变量接收ajax异步请求的返回结果,后续代码使用,然而后续代码在使用时该变量为初始值,始终得不到想要的结果!!!二.示例 ...
- 【FICO系列】SAP 参数(条件表)灵活配置GS01/GS02/GS03
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FICO系列]SAP 参数(条件表)灵活配 ...
- linux scp放后台执行方法
客户要搭建异地的容灾dg,压缩备份集500G,只能使用scp,前台跑经常超时,使scp放后台跑完成相关的文件传输: FULLBAK_LFCXJMYB_20190507_6448_1.DBFILE 10 ...