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ซึ่งมีเนื้อหาดังต่อไปนี้ ไฟล์นี้จะใช้เป็นอินพุตสำหรับโปรแกรมตัวอย่างของเรา