В 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 , который имеет следующее содержимое. Этот файл будет использоваться в качестве входных данных для нашего примера программы.