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处理。

 

相关文章
|
2月前
|
存储 Java 数据处理
|
2月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
2月前
|
存储 网络协议 Java
程序员的23大IO&NIO面试问题及答案
程序员的23大IO&NIO面试问题及答案
|
9月前
|
Java 测试技术 Apache
Java IO 与 NIO:高效的输入输出操作探究
输入输出(IO)是任何编程语言中的核心概念,而在Java中,IO操作更是应用程序成功运行的基石。随着计算机系统变得越来越复杂,对IO的要求也日益增加。在本文中,我们将探讨Java IO和非阻塞IO(NIO)的重要性以及如何在Java中实现高效的输入输出操作。
|
7天前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
8天前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
2月前
|
存储 Java API
【JAVA学习之路 | 进阶篇】IO流及流的分类
【JAVA学习之路 | 进阶篇】IO流及流的分类
|
2月前
|
监控 Java
Java一分钟之-NIO:非阻塞IO操作
【5月更文挑战第14天】Java的NIO(New IO)解决了传统BIO在高并发下的低效问题,通过非阻塞方式提高性能。NIO涉及复杂的选择器和缓冲区管理,易出现线程、内存和中断处理的误区。要避免这些问题,可以使用如Netty的NIO库,谨慎设计并发策略,并建立标准异常处理。示例展示了简单NIO服务器,接收连接并发送欢迎消息。理解NIO工作原理和最佳实践,有助于构建高效网络应用。
25 2
|
2月前
|
存储 监控 Java
Java nio非阻塞io
Java nio非阻塞io
|
2月前
|
缓存 Java API
Java NIO和IO之间的区别
NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
27 1