java中IO与NIO

IO与NIO的比较

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

IONIO

面向流面向缓冲

阻塞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的常见方法:

Bufferclear()

Bufferflip()

Bufferrewind()

Bufferposition(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()遍历整个目录

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JAVA中的I/O和NIO I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问...
    不学无数的程序员阅读 2,472评论 0 3
  • 一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,...
    Zal哥哥阅读 3,669评论 0 0
  • IO流学习总结 一Java IO,硬骨头也能变软 (1) 按操作方式分类结构图: (2)按操作对象分类结构图 二j...
    绿叶悠阅读 3,698评论 0 0
  • (1) 按操作方式分类结构图: (2)按操作对象分类结构图 二java IO体系的学习总结 IO流的分类:按照流的...
    JavaEdge阅读 3,483评论 0 13
  • Java I/O流 Java的IO通过Java.io包下的类和接口来支持,在Java.io包下主要输入、输出两种I...
    So_ProbuING阅读 3,142评论 0 4