博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NIO
阅读量:6305 次
发布时间:2019-06-22

本文共 1589 字,大约阅读时间需要 5 分钟。

参考链接:http://www.cnblogs.com/zhanglei93/p/6653923.html

NIO简单来讲就是nonblock IO,非阻塞IO,核心是一个接口和两个抽象类,Channel接口、Selector抽象类、Buffer抽象类,都在java.nio包中。

一.Channel

代表与一个实体的连接通道,常用的实体是文件和网络socket。Channel及其实现类是线程安全的。

Channel接口就两个方法,boolean isOpen();  及  void close();

常用的子接口是ByteChannel和NetworkChannel,前者是跟文件处理相关的,后者是跟网络连接有关的。

1.ByteChannel接口

常用的实现类是java.nio.channels.FileChannel,用于文件处理。FileChannel也是抽象类,不能直接实例化,只能通过调用FileInputStream对象、FileOutputStream对象或者RandomAccessFile对象的getChannel()方法生成。FileInputStream对象生成的FileChannel对象还是用于输入,FileOutputStream对象生成的FileChannel对象还是用于输出。

FileChannel常用的方法如下:

int read(ByteBuffer dst); 需要传一个ByteBuffer对象,意思是从调用者FileChannel对象中读取字节到指定的ByteBuffer对象中。

int write(ByteBuffer src); 也是需要传一个ByteBuffer对象,意思是把指定ByteBuffer对象中的字节写到调用者FileChannel对象中。注意FileChannel虽然在java.nio包中,但却不是nio的,因为write()方法执行的时候回阻塞线程的。

long transferTo(long position, long count, WritableByteChannel target); 意思是把调用者FileChannel对象的从position位置开始的、count个字节传输到指定的可写的ByteChannel对象中去,返回实际传输的字节数。

long transferFrom(ReadableByteChannel src, long position, long count); 意思是把给定的可读的ByteChannel对象的从position位置开始的、count个字节传输到调用者FileChannel对象去,返回实际传输的字节数。

MappedByteBuffer map(MapMode mode, long position, long size); 意思是把调用者FileChannel对应的文件按某种模式映射到内存中,得到一个ByteBuffer对象。模式有3种,分别是仅读、读写和私有。

2.NetworkChannel接口

下面再讲。

二.Buffer

是某种原始类型数据的容器。这里的原始类型就是java中除布尔类型外的7种原始类型,所以Buffer对应有7个子类,最常用的两个子类是ByteBuffer、charBuffer。

Buffer中有三个重要的概念:capacity(容量)、limit(界限)、position(位置):

capacity,缓冲区的容量表示该Buffer的最大数据容量,即最多可以存储多少数据,Buffer对象创建后,capacity不能改变。例如:ByteBuffer bbuff=ByteBuffer.allocate(8); 

转载于:https://www.cnblogs.com/koushr/p/5873386.html

你可能感兴趣的文章
LeetCode Container With Most Water (Two Pointers)
查看>>
vue (v-if show 问题)
查看>>
https基础
查看>>
css3 canvas之刮刮卡效果
查看>>
并查集模板
查看>>
RESTful Mongodb
查看>>
BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
查看>>
如何提高Ajax性能
查看>>
Android--自定义加载框
查看>>
LINUX下 lamp安装及配置
查看>>
BZOJ3105 [cqoi2013]新Nim游戏
查看>>
困惑的前置操作与后置操作
查看>>
SDNU 1269.整数序列(水题)
查看>>
BZOJ 2118 Dijkstra
查看>>
Go语言基础之结构体
查看>>
SpringCloud:Eureka Client项目搭建(Gradle项目)
查看>>
jqueryValidate
查看>>
ATL使用IE控件,并且屏蔽右键
查看>>
Jenkins
查看>>
linux下使用screen和ping命令对网络质量进行监控
查看>>