Jadual Kandungan
Channel
一、Channel的实现
二、基本的 Channel 示例
Rumah Java javaTutorial JAVA之Channel详解

JAVA之Channel详解

Jun 25, 2017 am 10:14 AM
channel

注意:转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(二) Channel

Channel

Java NIO的通道类似流,但又有些不同:

  • 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。

  • 通道可以异步地读写。

  • 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:

 

一、Channel的实现

这些是Java NIO中最重要的通道的实现:

  • FileChannel

  • DatagramChannel

  • SocketChannel

  • ServerSocketChannel

FileChannel 从文件中读写数据。

DatagramChannel 能通过UDP读写网络中的数据。

SocketChannel 能通过TCP读写网络中的数据。

ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

二、基本的 Channel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

public class Channel1 {public static void main(String[] args) {try {
            RandomAccessFile raf = new RandomAccessFile("./.gitignore","rw");
            FileChannel channel = raf.getChannel();     //获取通道ByteBuffer bf = ByteBuffer.allocate(50);    //通过静态allocate方法创建一个缓冲区,容量为50byte[] bytes = new byte[]{};
            bytes = "123".getBytes();
            bf = ByteBuffer.wrap(bytes);                //通过静态wrap方法,byte数组生成缓冲区,缓冲区中保留了原数据while(bf.hasRemaining()){
                System.out.print((char) bf.get());
            }int bytesRead ;while ((bytesRead = channel.read(bf)) != -1) {      //将通道中的数据写入缓冲区,并判断通道中的数据是否到末尾System.out.println("Read " + bytesRead);bf.flip();                                      //反转缓冲区 实际上就是将position置为0 后续buffer详细介绍while(bf.hasRemaining()){                       //判断缓冲区中是否还有值System.out.print((char) bf.get());          //输出缓冲区中的值                }
                bf.clear();                                     //清理缓冲区            }
            raf.close();                                        //关闭RandomAccessFile} catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Salin selepas log masuk

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节

Atas ialah kandungan terperinci JAVA之Channel详解. 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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat 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)

Apakah maksud saluran dalam bahasa Go? Apakah maksud saluran dalam bahasa Go? Dec 14, 2023 pm 02:21 PM

Saluran dalam bahasa Go ialah mekanisme untuk komunikasi dan penyegerakan data antara coroutine. Boleh dianggap sebagai jenis data khas, serupa dengan baris gilir atau paip, digunakan untuk memindahkan data antara coroutine yang berbeza. Saluran menyediakan dua operasi utama: hantar dan terima. Kedua-dua operasi hantar dan terima dalam saluran disekat, yang bermaksud bahawa jika tiada penghantar atau penerima sedia, operasi akan disekat sehingga coroutine bersedia untuk melaksanakan operasi yang sepadan, dsb.

Bagaimanakah fungsi golang berkomunikasi dengan goroutine melalui saluran? Bagaimanakah fungsi golang berkomunikasi dengan goroutine melalui saluran? May 01, 2024 pm 09:42 PM

Bahasa Go menggunakan saluran dan goroutine untuk berkomunikasi. Selepas mencipta saluran, goroutine boleh lulus

Bagaimana untuk menyelesaikan masalah penyusunan semula tugas serentak dalam bahasa Go? Bagaimana untuk menyelesaikan masalah penyusunan semula tugas serentak dalam bahasa Go? Oct 09, 2023 pm 10:55 PM

Bagaimana untuk menyelesaikan masalah penyusunan semula tugas serentak dalam bahasa Go? Dalam pengaturcaraan serentak, susunan pelaksanaan tugas selalunya tidak pasti, yang mungkin menyebabkan beberapa masalah, terutamanya untuk tugasan dengan kebergantungan. Dalam bahasa Go, kita boleh menyelesaikan masalah penyusunan semula tugas serentak dengan menggunakan saluran dan coroutine. Di bawah ini kami akan menerangkan secara terperinci bagaimana untuk mencapai ini. Biasanya, kami menggunakan saluran untuk mencapai penyegerakan dan komunikasi tugas. Dalam bahasa Go, saluran boleh digunakan sebagai primitif penyegerakan peringkat lebih tinggi untuk memastikan susunan pelaksanaan tugas. dengan menggunakan penimbal

Cara menggunakan Saluran java Cara menggunakan Saluran java Apr 19, 2023 am 11:22 AM

1. Jelaskan bahawa Saluran ialah objek yang melaluinya data boleh dibaca dan ditulis. Ia boleh dilihat sebagai aliran dalam IO. Tetapi berbanding dengan strim, ia mempunyai beberapa perbezaan: Saluran adalah dwiarah dan boleh dibaca atau ditulis, manakala strim adalah sehala. Saluran boleh dibaca dan ditulis secara tidak segerak. Membaca dan menulis saluran mesti melalui objek penimbal. 2. Contoh dilengkapkan menggunakan saluran dan penimbal tidak langsung. FileInputStreamfis=null;//Reference FileOutputStreamfout=null;FileChannelchannel=null;//Channel reference FileChanneloutchannel=null;try{fi

Bagaimana untuk menggunakan saluran dalam bahasa Go? Bagaimana untuk menggunakan saluran dalam bahasa Go? Jun 09, 2023 pm 08:13 PM

Dalam bahasa Go, saluran ialah mekanisme penting untuk mencapai komunikasi serentak. Ia menyediakan cara untuk menghantar data dari satu goroutine ke yang lain, dengan itu mencapai penyegerakan dan kerjasama data. Artikel ini akan memperkenalkan penggunaan asas saluran dalam bahasa Go dan beberapa langkah berjaga-jaga. 1. Pengisytiharan dan pemulaan saluran Dalam bahasa Go, mengisytiharkan saluran memerlukan menggunakan fungsi make() Contoh

Petua untuk menggunakan saluran dan mutex dalam fungsi Golang Petua untuk menggunakan saluran dan mutex dalam fungsi Golang May 16, 2023 am 10:51 AM

Golang ialah bahasa pengaturcaraan yang sangat popular yang digunakan secara meluas dalam pengaturcaraan rangkaian, pengkomputeran awan, pengaturcaraan serentak dan bidang lain. Antaranya, saluran dan mutex adalah konsep penting dalam pengaturcaraan Golang. Mereka boleh membantu kami menyelesaikan beberapa masalah dalam pengaturcaraan serentak. Artikel ini akan memperkenalkan cara menggunakan saluran dan mutex fungsi Golang. 1. Apakah saluran? Di Golang, saluran ialah jenis data yang boleh digunakan dalam Gor yang berbeza

Belajar! Gunakan saluran buffer sebagai Mutexes Belajar! Gunakan saluran buffer sebagai Mutexes Aug 08, 2023 pm 04:21 PM

Pakej penyegerakan menyediakan primitif penyegerakan asas seperti kunci mutex. Kecuali untuk jenis Once dan WaitGroup, kebanyakan jenis lain ditujukan untuk pustaka fungsi asas. Penyegerakan tahap yang lebih tinggi lebih baik dicapai melalui saluran dan komunikasi.

学习channel设计:从入门到放弃 学习channel设计:从入门到放弃 Aug 08, 2023 pm 04:33 PM

今天给大家带来的是Go语言中的channel。Go语言从出世以来就以高并发著称,得益于其Goroutine的设计,Goroutine也就是一个可执行的轻量级协程,有了Goroutine我们可以轻松的运行协程,但这并不能满足我们的需求,我们往往还希望多个线程/协程是能够通信的。

See all articles