IO分类和NIO组成

简介: 关于IO和NIO组成

IO流可以根据不同的角度分类,下面是几种常见的IO流分类方式:

  1. 根据数据类型分类:
  • 字节流(Byte Stream):以字节为单位进行读写操作,适用于处理二进制数据或者未经过编码的字符数据。
  • 字符流(Character Stream):以字符为单位进行读写操作,适用于处理文本数据,能够自动处理字符编码和解码的问题。
  1. 根据数据流向分类:
  • 输入流(Input Stream):用于从外部获取数据,读取数据到程序中。
  • 输出流(Output Stream):用于将数据输出到外部,将程序中的数据写入到外部。
  1. 根据功能分类:
  • 节点流(Node Stream):直接和数据源或目标进行交互,如FileInputStreamFileOutputStream等。
  • 处理流(Processing Stream):对节点流进行封装,提供更高层次的功能,如BufferedInputStreamBufferedOutputStream等。
  1. 根据处理对象的不同分类:
  • 文件流(File Stream):用于读写文件的IO流,如FileInputStreamFileOutputStreamFileReaderFileWriter等。
  • 字节数组流(Byte Array Stream):将数据读写到字节数组中,如ByteArrayInputStreamByteArrayOutputStream
  • 字符数组流(Char Array Stream):将数据读写到字符数组中,如CharArrayReaderCharArrayWriter
  • 字符串流(String Stream):将数据读写到字符串中,如StringReaderStringWriter
  • 管道流(Pipe Stream):用于两个线程之间进行通信,一个线程输出数据到管道,另一个线程从管道中读取数据。

这些分类方式可以帮助我们更好地理解和选择适合的IO流来处理不同的需求和数据类型。在实际应用中,根据具体情况选择合适的IO流非常重要,以提高效率和灵活性。

Java NIONew Input/Output)是Java提供的一种基于块(Block)或缓冲区(Buffer)的IO操作方式,于JDK 1.4中引入。相比传统的IO流方式,Java NIO提供了更高效、更灵活的IO操作方式,并且支持非阻塞IO

Java NIO的核心概念包括以下几个部分:

  1. 通道(Channel):通道是数据源与目标的双向连接,可以通过通道读取和写入数据。通道可以是文件、网络Socket或其他IO设备。
  • FileChannel:用于文件IO操作。
  • SocketChannel:用于网络SocketIO操作。
  • ServerSocketChannel:用于监听新进来的TCP连接的网络通道。
  • DatagramChannel:用于UDP网络数据的IO操作。
  1. 缓冲区(Buffer):缓冲区是存储数据的容器,可以在缓冲区中进行读写操作。使用缓冲区可以提高IO操作的效率。
  • ByteBuffer:用于字节数据的缓冲区。
  • CharBuffer:用于字符数据的缓冲区。
  • IntBufferLongBufferDoubleBuffer等:用于其他基本数据类型的缓冲区。
  1. 选择器(Selector):选择器用于检测一个或多个通道上的IO事件,比如连接打开、数据到达等。通过选择器,可以实现单线程处理多个通道的IO操作,提高系统的性能和资源利用率。

Java NIO的工作方式是通过将数据从通道读取到缓冲区,或将数据从缓冲区写入到通道,实现数据的读写操作。使用选择器可以实现非阻塞IO,从而允许单线程同时处理多个通道的IO事件。

总而言之,Java NIO提供了一种灵活高效的IO操作方式,适用于网络编程、服务器编程等场景。它的核心是通道、缓冲区和选择器,通过这些组件可以实现高性能的IO处理。

 

相关文章
|
7月前
|
存储 Java 数据处理
|
1月前
io流分类
按流向分类: 输入流:用于从数据源(如文件、键盘)读取数据。 输出流:用于向目标(如文件、屏幕)写入数据。 按操作类型分类: 字节流:以字节为单位进行操作,适用于所有类型的数据。 字符流:以字符为单位进行操作,更便于处理文本数据。
16 4
|
5月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
2月前
|
Java Linux 索引
IO的分类有哪些
IO的分类有哪些
|
2月前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
66 0
|
4月前
|
网络协议 Oracle Java
【IO面试题 三】、说说NIO的实现原理
Java NIO的实现原理基于Channel、Buffer和Selector,支持从Channel读取数据到Buffer以及从Buffer写入数据到Channel,并通过Selector实现单线程多Channel的事件驱动IO操作。
【IO面试题 三】、说说NIO的实现原理
|
4月前
|
Java
"揭秘Java IO三大模式:BIO、NIO、AIO背后的秘密!为何AIO成为高并发时代的宠儿,你的选择对了吗?"
【8月更文挑战第19天】在Java的IO编程中,BIO、NIO与AIO代表了三种不同的IO处理机制。BIO采用同步阻塞模型,每个连接需单独线程处理,适用于连接少且稳定的场景。NIO引入了非阻塞性质,利用Channel、Buffer与Selector实现多路复用,提升了效率与吞吐量。AIO则是真正的异步IO,在JDK 7中引入,通过回调或Future机制在IO操作完成后通知应用,适合高并发场景。选择合适的模型对构建高效网络应用至关重要。
99 2
|
5月前
|
安全 Java Linux
(七)Java网络编程-IO模型篇之从BIO、NIO、AIO到内核select、epoll剖析!
IO(Input/Output)方面的基本知识,相信大家都不陌生,毕竟这也是在学习编程基础时就已经接触过的内容,但最初的IO教学大多数是停留在最基本的BIO,而并未对于NIO、AIO、多路复用等的高级内容进行详细讲述,但这些却是大部分高性能技术的底层核心,因此本文则准备围绕着IO知识进行展开。
191 1
|
5月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
7月前
|
存储 Java API
【JAVA学习之路 | 进阶篇】IO流及流的分类
【JAVA学习之路 | 进阶篇】IO流及流的分类