01 java中IO、NIO

IO与NIO的比较

IO是面向流的,NIO是面向缓冲区的;IO的各种流是阻塞的, NIO是非阻塞模式

IO

NIO

面向流

面向缓冲

阻塞IO

非阻塞IO

选择器

 

1 IO

IO流的分类:

按照流的流向分,可以分为输入流和输出流;

按照操作单元划分,可以划分为字节流和字符流;

按照流的角色划分为节点流和处理流。

 

流的原理浅析:

java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。

InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。

OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

 

2 NIO

2.1 NIO 之 Buffer(缓冲区)

Buffer(缓冲区)介绍:

Java NIO Buffers用于和NIO Channel交互。 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels;

Buffer本质上就是一块内存区;

一个Buffer有三个属性是必须掌握的,分别是:capacity容量、position位置、limit限制。

 

Buffer的常见方法:

Buffer clear()

Buffer flip()

Buffer rewind()

Buffer position(int newPosition)

Buffer的使用方式/方法介绍:

 

分配缓冲区(Allocating a Buffer):

ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer为例子

写入数据到缓冲区(Writing Data to a Buffer)

 

写数据到Buffer有两种方法:

(1)从Channel中写数据到Buffer

       int bytesRead = inChannel.read(buf); //read into buffer.

(2)通过put写数据:

       buf.put(127);

2.2 NIO 之 Channel(通道)

在Java NIO中如果一个channel是FileChannel类型的,那么他可以直接把数据传输到另一个channel。

transferFrom() :transferFrom方法把数据从通道源传输到FileChannel

transferTo() :transferTo方法把FileChannel数据传输到另一个channel

 

2.3 NIO之Selector(选择器)

Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

 

2.4 NIO之拥抱Path和Files

JDK中Paths工具类,Files工具类,对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程。

(1)文件I/O基石:Path:

       创建一个Path

       File和Path之间的转换,File和URI之间的转换

       获取Path的相关信息

       移除Path中的冗余项

(2)拥抱Files类:

       Files.exists() 检测文件路径是否存在

       Files.createFile() 创建文件

       Files.createDirectories()和Files.createDirectory()创建文件夹

       Files.delete()方法 可以删除一个文件或目录

       Files.copy()方法可以吧一个文件从一个地址复制到另一个位置

       获取文件属性

       遍历一个文件夹

       Files.walkFileTree()遍历整个目录

 

posted @ 2019-04-21 15:07  java小工匠  阅读(163)  评论(0编辑  收藏  举报