Учебники

Java NIO — Труба

В Java канал NIO — это компонент, который используется для записи и чтения данных между двумя потоками. Труба в основном состоит из двух каналов, которые отвечают за распространение данных.

Среди двух составляющих каналов один называется каналом Sink, который в основном предназначен для записи данных, а другой — каналом Source, основная цель которого — считывать данные из канала Sink.

Синхронизация данных сохраняется в порядке во время записи и чтения данных, поскольку необходимо обеспечить, чтобы данные были прочитаны в том же порядке, в котором они записаны в канал.

Следует помнить, что это однонаправленный поток данных в канале, т.е. данные записываются только в канале приемника и могут быть прочитаны только из канала источника.

В Java канал NIO определяется как абстрактный класс, состоящий в основном из трех методов, из которых два являются абстрактными.

Методы класса Труба

  • open () — этот метод используется для получения экземпляра Pipe, или мы можем сказать, что pipe создан путем вызова этого метода.

  • sink () — Этот метод возвращает канал приемника канала, который используется для записи данных, вызывая его метод записи.

  • source () — Этот метод возвращает исходный канал канала, который используется для чтения данных, вызывая его метод чтения.

open () — этот метод используется для получения экземпляра Pipe, или мы можем сказать, что pipe создан путем вызова этого метода.

sink () — Этот метод возвращает канал приемника канала, который используется для записи данных, вызывая его метод записи.

source () — Этот метод возвращает исходный канал канала, который используется для чтения данных, вызывая его метод чтения.

пример

В следующем примере показана реализация 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();
      }
   }
}

Выход

Test Data to Check java NIO Channels Pipe.

Предположим, у нас есть текстовый файл c: /test.txt , который имеет следующее содержимое. Этот файл будет использоваться в качестве входных данных для нашего примера программы.