Java NIO - ไปป์

ใน Java NIO ไปป์เป็นส่วนประกอบที่ใช้ในการเขียนและอ่านข้อมูลระหว่างสองเธรดท่อส่วนใหญ่ประกอบด้วยสองช่องทางซึ่งรับผิดชอบในการเผยแพร่ข้อมูล

หนึ่งในสองช่องที่เป็นส่วนประกอบหนึ่งเรียกว่าช่อง Sink ซึ่งส่วนใหญ่ใช้สำหรับการเขียนข้อมูลและช่องอื่น ๆ คือช่องต้นทางที่มีจุดประสงค์หลักเพื่ออ่านข้อมูลจากช่อง Sink

การซิงโครไนซ์ข้อมูลจะถูกเก็บไว้ตามลำดับในระหว่างการเขียนและการอ่านข้อมูลเนื่องจากต้องมั่นใจว่าข้อมูลจะต้องอ่านในลำดับเดียวกันกับที่เขียนไปยัง Pipe

ต้องแจ้งให้ทราบว่าเป็นการไหลแบบทิศทางเดียวของข้อมูลใน Pipe กล่าวคือข้อมูลที่เขียนในช่อง Sink เท่านั้นและสามารถอ่านได้จากช่องต้นทางเท่านั้น

ในท่อ Java NIO ถูกกำหนดให้เป็นคลาสนามธรรมโดยส่วนใหญ่มีสามวิธีซึ่งสองวิธีเป็นนามธรรม

วิธีการของคลาส Pipe

  • open() - วิธีนี้ใช้เพื่อรับอินสแตนซ์ของ Pipe หรือเราสามารถพูดได้ว่าท่อถูกสร้างขึ้นโดยการเรียกใช้เมธอดนี้

  • sink() - วิธีนี้จะคืนค่าช่องอ่างของท่อซึ่งใช้ในการเขียนข้อมูลโดยเรียกวิธีการเขียน

  • source() - วิธีนี้ส่งคืนช่องต้นทางของ Pipe ซึ่งใช้ในการอ่านข้อมูลโดยเรียกใช้วิธีการอ่าน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการนำไปใช้ Java NIO ไปป์

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;

public class PipeDemo {
   public static void main(String[] args) throws IOException {
      //An instance of Pipe is created
      Pipe pipe = Pipe.open();
      // gets the pipe's sink channel
      Pipe.SinkChannel skChannel = pipe.sink();
      String testData = "Test Data to Check java NIO Channels Pipe.";
      ByteBuffer buffer = ByteBuffer.allocate(512);
      buffer.clear();
      buffer.put(testData.getBytes());
      buffer.flip();
      //write data into sink channel.
      while(buffer.hasRemaining()) {
         skChannel.write(buffer);
      }
      //gets  pipe's source channel
      Pipe.SourceChannel sourceChannel = pipe.source();
      buffer = ByteBuffer.allocate(512);
      //write data into console     
      while(sourceChannel.read(buffer) > 0){
         //limit is set to current position and position is set to zero
         buffer.flip();
         while(buffer.hasRemaining()){
            char ch = (char) buffer.get();
            System.out.print(ch);
         }
         //position is set to zero and limit is set to capacity to clear the buffer.
         buffer.clear();
      }
   }
}

เอาต์พุต

Test Data to Check java NIO Channels Pipe.

สมมติว่าเรามีไฟล์ข้อความ c:/test.txtซึ่งมีเนื้อหาดังต่อไปนี้ ไฟล์นี้จะใช้เป็นอินพุตสำหรับโปรแกรมตัวอย่างของเรา