目錄
Channel
一、Channel的實作
首頁 Java java教程 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();
        }
    }
}
登入後複製
## #############注意buf.flip() 的調用,先讀取資料到Buffer,然後反轉Buffer,接著再從Buffer中讀取資料。下一節會深入解說Buffer的更多細節###

以上是JAVA之Channel詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言中的channel是什麼意思 Go語言中的channel是什麼意思 Dec 14, 2023 pm 02:21 PM

Go語言中的channel是一種用於協程之間進行通訊和資料同步的機制。可以被視為一種特殊的資料類型,類似於佇列或管道,用於在不同的協程之間傳遞資料。 Channel提供了兩個主要操作:發送(send)和接收(receive)。在channel中發送和接收操作都是阻塞的,這意味著如果沒有發送方或接收方準備好,操作將被阻塞,直到有一個協程準備好進行相應的操作等。

golang函數如何透過channel與goroutine通訊? golang函數如何透過channel與goroutine通訊? May 01, 2024 pm 09:42 PM

Go語言中使用channel和goroutine溝通。創建channel後,goroutine可以透過

在Go語言中如何解決並發任務重排序問題? 在Go語言中如何解決並發任務重排序問題? Oct 09, 2023 pm 10:55 PM

在Go語言中如何解決並發任務重排序問題?在並發程式設計中,任務的執行順序往往是不確定的,這可能會導致一些問題,特別是對於有依賴關係的任務。在Go語言中,我們可以透過使用通道和協程來解決並發任務重排序問題。下面我們將詳細介紹如何實作。通常情況下,我們使用通道來實現任務的同步和通訊。在Go語言中,通道可以作為更高階的同步原語來保證任務的執行順序。透過使用有緩衝的

java Channel怎麼使用 java Channel怎麼使用 Apr 19, 2023 am 11:22 AM

1.說明Channel是一個可以透過它讀寫資料的物件。它可以被視為IO中的流。但與流相比,它有一些不同:Channel是雙向的,可以讀也可以寫,流是單向的。 Channel可以異步讀寫入。 Channel的讀寫必須透過buffer物件。 2、實例利用通道和非直接緩衝區完成。 FileInputStreamfis=null;//引用FileOutputStreamfout=null;FileChannelchannel=null;//通道引用FileChanneloutchannel=null;try{fi

Go 語言中的 channel 怎麼使用? Go 語言中的 channel 怎麼使用? Jun 09, 2023 pm 08:13 PM

在Go語言中,channel是實現並發通訊的重要機制。它提供了一種將資料從一個goroutine傳遞到另一個goroutine的方式,從而實現資料的同步和協作。本文將介紹Go語言中channel的基本用法和一些注意事項。一、channel的宣告和初始化在Go語言中,宣告一個channel需要使用make()函數,範例代

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

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

學到了!將緩衝 channel 當做 Mutex 來使用 學到了!將緩衝 channel 當做 Mutex 來使用 Aug 08, 2023 pm 04:21 PM

sync 套件提供了基本的同步原語,例如互斥鎖。除了 Once 和 WaitGroup 類型之外,大多數其他類型都是為底層函數庫準備的。透過 channel 和通訊更好地完成更高層級的同步。

Golang函數的channel和mutex的使用技巧 Golang函數的channel和mutex的使用技巧 May 16, 2023 am 10:51 AM

Golang是一種非常流行的程式語言,它被廣泛應用於網路程式設計、雲端運算、並發程式設計等領域。其中,channel和mutex是Golang程式設計中比較重要的概念,它們能夠幫助我們解決並發程式設計中的一些問題。本文將會介紹如何使用Golang函數的channel和mutex。一、什麼是channel?在Golang中,channel是一種資料類型,它可以用來在不同的Gor

See all articles