Java NIO - แชนเนล

คำอธิบาย

ตามชื่อแนะนำช่องถูกใช้เป็นค่าเฉลี่ยของการไหลของข้อมูลจากปลายด้านหนึ่งไปยังอีกด้านหนึ่งที่นี่ในช่อง java NIO จะทำหน้าที่เหมือนกันระหว่างบัฟเฟอร์และเอนทิตีที่ปลายอีกด้านหนึ่งในคำอื่น ๆ ช่องใช้เพื่ออ่านข้อมูลไปยังบัฟเฟอร์และเขียนข้อมูลจากบัฟเฟอร์

แตกต่างจากสตรีมที่ใช้ในแชนเนล Java IO ทั่วไปคือสองทางคือสามารถอ่านและเขียนได้ Java NIO channel รองรับการไหลของข้อมูลแบบอะซิงโครนัสทั้งในโหมดบล็อกและไม่บล็อก

การใช้งานช่อง

ช่อง Java NIO ถูกนำไปใช้ในคลาสต่อไปนี้เป็นหลัก -

  • FileChannel- ในการอ่านข้อมูลจากไฟล์เราใช้ช่องไฟล์ ออบเจ็กต์ของช่องไฟล์สามารถสร้างได้โดยการเรียกเมธอด getChannel () บนอ็อบเจ็กต์ไฟล์เท่านั้นเนื่องจากเราไม่สามารถสร้างอ็อบเจ็กต์ไฟล์ได้โดยตรง

  • DatagramChannel - ช่องดาต้าแกรมสามารถอ่านและเขียนข้อมูลผ่านเครือข่ายผ่าน UDP (User Datagram Protocol) วัตถุของ DataGramchannel สามารถสร้างได้โดยใช้วิธีการของโรงงาน

  • SocketChannel- ช่อง SocketChannel สามารถอ่านและเขียนข้อมูลผ่านเครือข่ายผ่าน TCP (Transmission Control Protocol) นอกจากนี้ยังใช้วิธีการของโรงงานในการสร้างวัตถุใหม่

  • ServerSocketChannel- ServerSocketChannel อ่านและเขียนข้อมูลผ่านการเชื่อมต่อ TCP เช่นเดียวกับเว็บเซิร์ฟเวอร์ สำหรับทุกการเชื่อมต่อที่เข้ามาจะมีการสร้าง 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!