Java NIO - 通道



描述

顧名思義,通道用作資料從一端流向另一端的媒介。在 Java NIO 中,通道充當緩衝區和另一端實體之間的橋樑;換句話說,通道用於將資料讀取到緩衝區,以及將資料從緩衝區寫入。

與傳統 Java IO 中使用的流不同,通道是雙向的,即可以讀取也可以寫入。Java NIO 通道支援資料的非同步流,既可以阻塞模式也可以非阻塞模式。

通道的實現

Java NIO 通道主要在以下類中實現:

  • FileChannel − 為了讀取檔案中的資料,我們使用檔案通道。檔案通道的物件只能透過呼叫檔案物件上的 getChannel() 方法來建立,我們不能直接建立檔案通道物件。

  • DatagramChannel − 資料報通道可以透過 UDP(使用者資料報協議)在網路上讀取和寫入資料。DataGramchannel 的物件可以使用工廠方法建立。

  • SocketChannel − 套接字通道可以透過 TCP(傳輸控制協議)在網路上讀取和寫入資料。它也使用工廠方法來建立新物件。

  • ServerSocketChannel − 伺服器套接字通道在 TCP 連線上讀取和寫入資料,就像 Web 伺服器一樣。對於每個傳入的連線,都會建立一個 SocketChannel。

示例

以下示例從C:/Test/temp.txt文字檔案讀取資料並將內容列印到控制檯。

temp.txt

Hello World!

ChannelDemo.java

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelDemo {
   public static void main(String args[]) throws IOException {
      RandomAccessFile file = new RandomAccessFile("C:/Test/temp.txt", "r");
      FileChannel fileChannel = file.getChannel();
      ByteBuffer byteBuffer = ByteBuffer.allocate(512);
      while (fileChannel.read(byteBuffer) > 0) {
         // flip the buffer to prepare for get operation
         byteBuffer.flip();
         while (byteBuffer.hasRemaining()) {
            System.out.print((char) byteBuffer.get());
         }
      }
      file.close();
   }
}

輸出

Hello World!
廣告
© . All rights reserved.