Java NIO係列教程(二) Channel
Java NIO的通道類似流,但又有些不同:
- 既可以從通道中讀取數據,又可以寫數據到通道。但流的讀寫通常是單向的。
- 通道可以異步地讀寫。
- 通道中的數據總是要先讀到一個Buffer,或者總是要從一個Buffer中寫入。
正如上麵所說,從通道讀取數據到緩衝區,從緩衝區寫入數據到通道。如下圖所示:
Channel的實現
這些是Java NIO中最重要的通道的實現:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
FileChannel 從文件中讀寫數據。
DatagramChannel 能通過UDP讀寫網絡中的數據。
SocketChannel 能通過TCP讀寫網絡中的數據。
ServerSocketChannel可以監聽新進來的TCP連接,像Web服務器那樣。對每一個新進來的連接都會創建一個SocketChannel。
基本的 Channel 示例
下麵是一個使用FileChannel讀取數據到Buffer中的示例:
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw"); FileChannel inChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); while (bytesRead != -1) { System.out.println("Read " + bytesRead); buf.flip(); while(buf.hasRemaining()){ System.out.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } aFile.close();
注意 buf.flip() 的調用,首先讀取數據到Buffer,然後反轉Buffer,接著再從Buffer中讀取數據。下一節會深入講解Buffer的更多細節。
文章轉自 並發編程網-ifeve.com
最後更新:2017-05-22 17:01:36
上一篇:
Java NIO係列教程(三) Buffer
下一篇:
Java NIO係列教程(七) FileChannel
雲棲大會大招不斷:號稱:“最懂人”的路由器時代來臨
The j.u.c Synchronizer Framework翻譯(一)背景與需求
pythonchallenge_level11
Spring Data 4.4-4.5翻譯
Spring事務管理—aop:pointcut expression解析
分卷壓縮和分卷解壓
AliSQL 20170716版本發布 Invisible Indexes 功能和 SELECT FROM UPDATE 語法
android 4.0以上版本橫豎屏切換後不重建不銷毀Activity
歸心似箭,IT達人分享搶票攻略
唿叫中心知識庫內容如何做到客戶化?