Jadual Kandungan
Channel 和 Buffer
Selector
Rumah Java javaTutorial JAVA-1NIO的详细介绍

JAVA-1NIO的详细介绍

Jun 25, 2017 am 10:44 AM
Gambaran keseluruhan

JAVA-1NIO概述

Java NIO 由以下几个核心部分组成:

  • Channels

  • Buffers

  • Selectors

虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。

Channel 和 Buffer

基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示:

Channel和Buffer有好几种类型。下面是JAVA NIO中的一些主要Channel的实现:

  • FileChannel

  • DatagramChannel

  • SocketChannel

  • ServerSocketChannel

正如你所看到的,这些通道涵盖了UDP 和 TCP 网络IO,以及文件IO。

与这些类一起的有一些有趣的接口,但为简单起见,我尽量在概述中不提到它们。本教程其它章节与它们相关的地方我会进行解释。

以下是Java NIO里关键的Buffer实现:

  • ByteBuffer

  • CharBuffer

  • DoubleBuffer

  • FloatBuffer

  • IntBuffer

  • LongBuffer

  • ShortBuffer

这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。

Java NIO 还有个 MappedByteBuffer,用于表示内存映射文件, 我也不打算在概述中说明。

Selector

Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。

这是在一个单线程中使用一个Selector处理3个Channel的图示:

要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

Atas ialah kandungan terperinci JAVA-1NIO的详细介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Gambaran keseluruhan masalah pembebanan operator dan penyelesaian dalam C++ Gambaran keseluruhan masalah pembebanan operator dan penyelesaian dalam C++ Oct 08, 2023 pm 01:02 PM

Gambaran keseluruhan masalah pembebanan operator dan penyelesaian dalam C++

Python Tkinter menunjukkan kuasanya: Cipta aplikasi GUI yang menakjubkan Python Tkinter menunjukkan kuasanya: Cipta aplikasi GUI yang menakjubkan Mar 24, 2024 am 09:11 AM

Python Tkinter menunjukkan kuasanya: Cipta aplikasi GUI yang menakjubkan

Ketersediaan Tinggi PHP: Amalan Terbaik untuk Ketersediaan Aplikasi 24/7 Ketersediaan Tinggi PHP: Amalan Terbaik untuk Ketersediaan Aplikasi 24/7 Mar 26, 2024 pm 09:31 PM

Ketersediaan Tinggi PHP: Amalan Terbaik untuk Ketersediaan Aplikasi 24/7

Memperkenalkan Rangkaian Wayarles Memperkenalkan Rangkaian Wayarles Feb 19, 2024 pm 10:38 PM

Memperkenalkan Rangkaian Wayarles

Mendedahkan kisah di sebalik tabir rangka kerja Yii: Mengawal alam baharu pembangunan PHP Mendedahkan kisah di sebalik tabir rangka kerja Yii: Mengawal alam baharu pembangunan PHP Mar 26, 2024 am 10:31 AM

Mendedahkan kisah di sebalik tabir rangka kerja Yii: Mengawal alam baharu pembangunan PHP

Gambaran keseluruhan perpustakaan EventLoop dalam PHP8.0 Gambaran keseluruhan perpustakaan EventLoop dalam PHP8.0 May 14, 2023 am 08:49 AM

Gambaran keseluruhan perpustakaan EventLoop dalam PHP8.0

Alih keluar halangan pengurusan projek dengan PHP Git Alih keluar halangan pengurusan projek dengan PHP Git Mar 31, 2024 pm 12:11 PM

Alih keluar halangan pengurusan projek dengan PHP Git

Gambaran keseluruhan ruang nama PHP Gambaran keseluruhan ruang nama PHP Aug 20, 2023 am 11:29 AM

Gambaran keseluruhan ruang nama PHP

See all articles