序言:学Netty以前,对流的概念应该深入一些,因此先理解一下流的使用!java
jdk1.4以前就一个io流,服务器实现模式为一个链接一个线程,即客户端有链接请求时服务器就须要启动一个线程进行处理,若是这个链接不作任何事情会形成没必要要的线程开销,能够经过线程池机制来改善。BIO方式适用于链接数目比较小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中。编程
Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,能够替代标准的Java IO API。 NIO与原来的IO有一样的做用和目的,可是使用 的方式彻底不一样,NIO支持面向缓冲区的、基于 通道的IO操做。NIO将以更加高效的方式进行文 件的读写操做。数组
异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操做系统先完成了再通知服务器用其启动线程进行处理。AIO方式适用于链接数目多且链接比较长(重操做)的架构,好比相册服务器,充分调用OS参与并发操做,编程比较复杂,jdk1.7开始支持。服务器
同步:一我的只能先上完小学才能上初中,上完初中才能上高中,最后才能够大学,一步一步来,这是同步。架构
异步:一我的能够一边听歌,也能够一边玩游戏,两种动做能够同时进行并发
client(客户端)和server(服务端),把数据client传送到server,或者server传送到client,就至关于怎么上海火车站的人群运输到北京火车站,或者北京车站运输到上海火车站。异步
channel至关于:北京上海之间的铁轨工具
buffer至关于:火车(能够有多个型号的火车)spa
在Java NIO中负责数据的存取,缓冲区就是数组,用于存储不一样数据类型的数据,根据数据类型不一样,提供了响应类型的缓冲区:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,经过 allocate() 获取缓冲区。操作系统
Channel相似于传送的流,只不过Channel自己不能直接访问数据,Channel只能与Buffer进行交互
简而言之,Channel 负责传输, Buffer 负责存储
接下来的几片博客,将详细分别讲述Buffer、Channel的用法。
Pathjava.nio.file.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对象的字符串表示形式 |
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 对象 |