治疗技术焦虑的方法就是学习!

代码调优(3.1)-使用NIO提高性能

Java程序性能调优 李新广 550℃ 0评论

由于IO的速度要比内存慢,因此,I/O读写在很多场合都会成为系统的瓶颈。提升I/O速度,对提升系统整体性能有着很大的好处。在Java的标准I/O中,提供了基于流的I/O实现,即InputStream和OutputStream。这种基于流的实现以字节为单位处理数据,并且非常容易建立各种过滤器。

与流式的 I/O 不同,NIO是基于块(Block)的,它以块为基本单位处理数据。在NIO中,最为重要的两个组件是缓冲 Buffer 和通道 Channel 。缓冲是一块连续的内存块,是 NIO 读写数据的中转地。通道表示缓冲数据的源头或者目的地,它用于向缓冲读取或者写入数据,是访问缓冲的接口。

基本概念

Java NIO中,主要使用的通道如下:

  • DatagramChannel
  • SocketChannel
  • FileChannel
  • ServerSocketChannel

上述通道涵盖UDP(用户数据报协议)+ TCP(传输控制协议)网络I/O和文件I/O。缓冲列表

在Java NIO中使用的核心缓冲区如下:

  • CharBuffer
  • DoubleBuffer
  • IntBuffer
  • LongBuffer
  • ByteBuffer
  • ShortBuffer
  • FloatBuffer

上述缓冲区覆盖了通过I/O发送的基本数据类型:charactersdoubleintlongbyteshortfloat。选择器

Java NIO提供了“选择器”的概念。这是一个可以用于监视多个通道的对象,如数据到达,连接打开等。因此,单线程可以监视多个通道中的数据。

如果应用程序有多个通道(连接)打开,但每个连接的流量都很低,则可考虑使用它。 例如:在聊天服务器中。

 

 

先看一个例子:

利用传统的IO流复制文件

利用NIO复制文件

Java NIO分散/聚集或向量I/O

在Java NIO中,通道提供了称为分散/聚集或向量I/O的重要功能。 这是一种简单但功能强大的技术,通过这种技术,使用单个write()函数将字节从一组缓冲区写入流,并且可以使用单个read()函数将字节从流读取到一组缓冲区中。

Java NIO已经内置了分散/聚集支持。它可以用于从频道读取和写入频道。

写入两段话到文件,然后读取打印。

转载请注明:大道至简 » 代码调优(3.1)-使用NIO提高性能

喜欢 (1)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址