1.NIO简介
I/O流(输入/输出流)指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。新的输入/
输出(NIO)库是在JDK 1.4中引入的。NIO弥补了原来的I/O的不足,它在标准Java代码中提供了高速的、面向块
的I/O。
原来的I/O库与NIO最重要的区别是数据打包和传输的方式的不同,原来的 I/O 以流的方式处理数据,而
NIO 以块的方式处理数据。
面向流的I/O系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数
据。为流式数据创建过滤器非常容易。链接几个过滤器,以便每个过滤器只负责单个复杂处理机制的一部分,
这样也是相对简单的。不利的一面是,面向流的I/O通常相当慢。
NIO与原来的I/O有同样的作用和目的,但是它使用块I/O的处理方式。每一个操作都在一步中产生或者消费一
个数据块。按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的I/O缺少一些面向流的I/O所具有的
优雅性和简单性。
2.NIO与普通(非阻塞)I/O区别
NIO与普通的I/O最重要的区别是数据打包和传输方式的不同
I/O:以流的方式处理数据(相比之下NIO速度相当慢)
NIO:以块的方式处理数据
3.NIO核心
NIO以通道Channel和缓冲区Buffer为基础来实现面向块的I/O处理
NIO核心:通道Channel和缓冲区Buffer,每一个I/O操作都要使用通道和缓冲区
4. Channel与Buffer
Channel:对原I/O包中的流的模拟,到任何目的/来自任何源的数据都必须通过一个Channel对象
Buffer:实质上是个容器对象,发送给一个通道的数据都必须先放入缓冲区中,从通道中读取的数据都要先读到缓冲区中
5.通道和流:Channel是Stream的模拟
流:将字节写入流中,再从流中读取数据/将字节写入流中,再从流中写到目的地流是单向的
通道:读/写数据,通道只负责把数据传输到缓冲区,我们不会从通道中直接读取字节/写入字节
通道是双向的,可用于读/写/同时读写
6.Buffer与数组 区别
Buffer-----缓冲区实质上是一个数组.(通常是字节数组ByteBuffer,也可为其他类型的数组,FloatBuffer)
Buffer不仅是数组,Buffer提供了对数据的结构化访问get/put操作,还可跟踪系统的读/写进程
7.NIO 读/写
---读:1.从FileInputStream获得Channel (fin.getChannel())
2.创建一个Buffer, (ByteBuffer buffer = ByteBuffer.allocate(1024))
3.把缓冲区交给通道,数据便会通过通道读取到缓区冲中(channel.read(buffer)),再从缓冲区中读取数据buffer.get
---写:1.从FileOutputStream中获得Channel (fout.getChannel)
2.创建一个Buffer (ByteBuffer buffer = ByteBuffer.allocate(1024))
3.把要写入的数据填充(put)缓冲区,再把缓冲区交给通道,数据便会通过通道写入到目的地(channel.write(buffer))
分享到:
相关推荐
Java NIO的总结, 对于新人入门理解很好, 使用Markdown编写
NULL 博文链接:https://qianhao-1987.iteye.com/blog/1457157
JAVA_NIO学习总结J
这是学习Java NIO过程中总结的核心概念,里面包含了基本的知识点,详细知识点也可以查看我的博客:pcwl_java里的Java NIO篇
NIO的学习记录以及自己的总结,对关于NIO有个简单深刻的认识,可以应用在各个开发应用之中提升性能
java nio入门知识 java nio详细介绍总结
NULL 博文链接:https://edison87915.iteye.com/blog/729203
自己总结的java中NIO的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
我这里主要介绍几点经验总结: 1.Selector.select()在筛选就绪的SelectionKey的时候,采用的是阻塞模式。同时只要在就绪的SelectionKey列表中有至少一个SelectionKey存在,前述方法均将返回。 SocketChannel被...
nio使用的总结 目录 1. NIO_NIO 与 IO 区别 NIO支持面向缓冲区的、基于通道的IO操作 IO NIO 面向流(Stream Oriented) 面向缓冲区(Buffer Oriented) 阻塞IO(Blocking IO) 非阻塞IO(NonBlocking IO) (无) ...
niosocket及其开源框架MINA学习总结收集.pdf
对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码
涉及到java io, nio, aio相关知识点,学习过程中的一些总结,持续更新中,xmind 格式
最全的NIO学习资料总结! JAVA_NIO(全面细致).pdf,Java_NIO_细节.pdf nio原理与实例(看).png 提升网管通讯模块的消息吞吐量(两种模式比较).png
java.nio包的学习总结,看看确实有收获
Java NIO核心概念总结篇-附件资源
主要介绍了Java文件读写IO/NIO及性能比较详细代码及总结,具有一定借鉴价值,需要的朋友可以参考下。
Java ️总结:JVM,NIO,并发编程,MySQL,分库分表,微服务,分布式缓-Java-Summarize
主要介绍了java 基础知识之网络通信总结的相关资料,包括TCP通信、UDP通信、多播以及NIO,需要的朋友可以参考下