Netty进阶基础篇之流概念篇(1)

序言:学Netty以前,对流的概念应该深入一些,因此先理解一下流的使用!java

一、IO、NIO、AIO 含义区别

1.1 同步阻塞I/O(BIO block io)

jdk1.4以前就一个io流,服务器实现模式为一个链接一个线程,即客户端有链接请求时服务器就须要启动一个线程进行处理,若是这个链接不作任何事情会形成没必要要的线程开销,能够经过线程池机制来改善。BIO方式适用于链接数目比较小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中。编程

1.2 同步非阻塞I/O(NIO)

Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,能够替代标准的Java IO API。 NIO与原来的IO有一样的做用和目的,可是使用 的方式彻底不一样,NIO支持面向缓冲区的、基于 通道的IO操做。NIO将以更加高效的方式进行文 件的读写操做。数组

1.3 异步非阻塞I/O(AIO)

异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操做系统先完成了再通知服务器用其启动线程进行处理。AIO方式适用于链接数目多且链接比较长(重操做)的架构,好比相册服务器,充分调用OS参与并发操做,编程比较复杂,jdk1.7开始支持。服务器

1.4 同步与异步的区别

同步:一我的只能先上完小学才能上初中,上完初中才能上高中,最后才能够大学,一步一步来,这是同步。架构

异步:一我的能够一边听歌,也能够一边玩游戏,两种动做能够同时进行并发

1.5 NIO与IO的区别

二、NIO的核心

client(客户端)和server(服务端),把数据client传送到server,或者server传送到client,就至关于怎么上海火车站的人群运输到北京火车站,或者北京车站运输到上海火车站。异步

channel至关于:北京上海之间的铁轨工具

buffer至关于:火车(能够有多个型号的火车)spa

2.1 Buffer(缓冲区)

在Java NIO中负责数据的存取,缓冲区就是数组,用于存储不一样数据类型的数据,根据数据类型不一样,提供了响应类型的缓冲区:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,经过 allocate() 获取缓冲区。操作系统

2.2 Channel(通道)

Channel相似于传送的流,只不过Channel自己不能直接访问数据,Channel只能与Buffer进行交互

简而言之,Channel 负责传输, Buffer 负责存储

接下来的几片博客,将详细分别讲述Buffer、Channel的用法。

三、Path 与 Paths

3.1 Path

Pathjava.nio.file.Path 接口表明一个平台无关的平台路径,描述了目录结构中文件的位置。

Path经常使用方法:

Path经常使用方法
booleanendsWith(Stringpath) 判断是否以path路径结束
booleanstartsWith(Stringpath) 判断是否以path路径开始
boolean isAbsolute() 判断是不是绝对路径
PathgetFileName() 返回与调用Path对象关联的文件名
Path getName(int idx) 返回的指定索引位置 idx 的路径名称
intgetNameCount() 返回Path根目录后面元素的数量
PathgetParent() 返回Path对象包含整个路径,不包含Path对象指定的文件路径
PathgetRoot() 返回调用Path对象的根路径
Path resolve(Path p) 将相对路径解析为绝对路径
PathtoAbsolutePath() 做为绝对路径返回调用Path对象
StringtoString() 返回调用Path对象的字符串表示形式
   

3.2 Paths

java.nio.file.Files 用于操做文件或目录的工具类。

Files经常使用方法

方法 描述
Path get(String first, String ... more) Paths提供的get()方法用来获取Path对象,用于将多个字符串串连成路径
Path copy(Path src, Path dest, CopyOption ... how) 文件的复制
Path createDirectory(Path path, FileAttribute<?> ... attr) 建立一个目录
Path createFile(Path path, FileAttribute<?> ... arr) 建立一个文件
void delete(Path path) 删除一个文件
Path move(Path src, Path dest, CopyOption...how) 将 src 移动到 dest 位置  long size(Path path) : 返回 path 指定文件的大小
boolean exists(Path path, LinkOption ... opts) 判断文件是否存在
boolean isDirectory(Path path, LinkOption ... opts) 判断是不是目录
boolean isExecutable(Path path) 判断是不是可执行文件
boolean isHidden(Path path) 判断是不是隐藏文件
boolean isReadable(Path path) 判断文件是否可读
boolean isWritable(Path path) 判断文件是否可写
 boolean notExists(Path path, LinkOption ... opts) 判断文件是否不存在

 

Files操做内容方法
SeekableByteChannel newByteChannel(Path path, OpenOption...how)

获取与指定文件的链接,how 指定打开方式。

DirectoryStream newDirectoryStream(Path path) 打开 path 指定的目录
InputStream newInputStream(Path path, OpenOption...how) 获取 InputStream 对象
OutputStream newOutputStream(Path path, OpenOption...how) 获取 OutputStream 对象
相关文章
相关标签/搜索