Java NIO Channel
生活随笔
收集整理的這篇文章主要介紹了
Java NIO Channel
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java NIO 通道(Channel)
Java NIO的Channel和流(Streams)很相似,但是也有一些區別:
- Channel是雙向的,你可以從Channel中讀取,也可以向Channel中寫入。但是Streams是單向的(只讀或只寫);
- Channel可以異步進行讀寫操作; Channel只和緩沖區(Buffer)進行交互(讀或寫);
就像上面所說的,我們可以從Channel中讀取數據放入Buffer,也可以將Buffer中的數據寫入Channel中。如下圖所示:
Channel的實現類
下面是Java NIO中的一些重要的Channel實現類:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
上面的幾種Channel的實現類包括了文件IO、UDP IO和TCP IO等方面。其中:
FileChannel操作文件IO。
DatagramChannel操作UDP IO。
SocketChannel操作TCP IO中的客戶端。
ServerSocketChannel可以監聽連接請求,就像服務器端的工作一樣。每有一個連接,就會創建一個SocketChannel。
Channel使用的基本例子
下面的例子使用FileChannel來將文件中的數據讀取到一個Buffer:
import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public class FileChannelTest {public static void main(String[] args) throws IOException {RandomAccessFile aFile=new RandomAccessFile("nio-data.txt", "rw");FileChannel in=aFile.getChannel();ByteBuffer buf=ByteBuffer.allocate(2048);int bytesRead=in.read(buf);while(bytesRead!=-1) {System.out.println("Read "+bytesRead);buf.flip();while(buf.hasRemaining()) System.out.print((char)buf.get());buf.clear();bytesRead=in.read(buf);}aFile.close();} }注意上面的buf.flip()調用。首先將數據讀入Buffer,然后flip這個Buffer。具體的解釋會在后面介紹。
總結
以上是生活随笔為你收集整理的Java NIO Channel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷能不能带吃的
- 下一篇: 探索 Java 隐藏的开销