Java NIO - Pipe

Trong Java NIO pipe là một thành phần được sử dụng để ghi và đọc dữ liệu giữa hai luồng, chủ yếu bao gồm hai kênh chịu trách nhiệm truyền dữ liệu.

Trong số hai kênh cấu thành, một được gọi là kênh Sink chủ yếu để ghi dữ liệu và kênh khác là kênh Nguồn có mục đích chính là đọc dữ liệu từ kênh Sink.

Đồng bộ hóa dữ liệu được giữ theo thứ tự trong quá trình ghi và đọc dữ liệu vì nó phải đảm bảo rằng dữ liệu phải được đọc theo cùng một thứ tự mà nó được ghi vào Pipe.

Cần lưu ý rằng nó là luồng dữ liệu một chiều trong Pipe, tức là dữ liệu chỉ được ghi trong kênh Sink và chỉ có thể được đọc từ kênh Nguồn.

Trong Java NIO pipe được định nghĩa là một lớp trừu tượng với chủ yếu là ba phương thức, trong đó hai phương thức là trừu tượng.

Các phương thức của lớp Pipe

  • open() - Phương thức này được sử dụng để lấy một thể hiện của Pipe hoặc có thể nói đường ống được tạo ra bằng cách gọi ra phương thức này.

  • sink() - Phương thức này trả về kênh chìm của Pipe được sử dụng để ghi dữ liệu bằng cách gọi phương thức ghi của nó.

  • source() - Phương thức này trả về kênh nguồn của Pipe được sử dụng để đọc dữ liệu bằng cách gọi phương thức đọc của nó.

Thí dụ

Ví dụ sau đây cho thấy việc triển khai Java NIO pipe.

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();
      }
   }
}

Đầu ra

Test Data to Check java NIO Channels Pipe.

Giả sử chúng ta có một tệp văn bản c:/test.txt, có nội dung sau. Tệp này sẽ được sử dụng làm đầu vào cho chương trình mẫu của chúng tôi.