Mục lục
Hướng dẫn và ví dụ Java PipedReader
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.



Để dễ dàng hiểu về PipedReader tôi đưa ra một tình huống như hình minh hoạ dưới đây:

Giả sử bạn đang phát triển một ứng dụng Multithreading (Đa luồng), và bạn có 2 Thread độc lập là Thread-A và Thread-B. Câu hỏi đặt ra là:
- Cần làm gì để mỗi khi các ký tự xuất hiện trên Thread-A chúng sẽ được chuyển sang Thread-B một cách tự động?

PipedWriter và PipedReader được tạo ra giúp bạn xử lý tình huống đề cập ở trên. Mỗi khi dữ liệu được ghi vào PipedWriter chúng sẽ xuất hiện một cách tự động trên PipedReader.
PipedReader constructors
PipedReader()
PipedReader(int pipeSize)
PipedReader(PipedWriter src)
PipedReader(PipedWriter src, int pipeSize)
Để dữ liệu ghi vào PipedWriter xuất hiện trên PipedReader bạn phải kết nối (connect) hai đối tượng này với nhau.
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader();
pipedWriter.connect(pipedReader);
Code trên cũng tương đương với các cách dưới đây:
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader();
pipedReader.connect(pipedWriter);
PipedWriter pipedWriter = new PipedWriter();
PipedReader pipedReader = new PipedReader(pipedWriter);
PipedReader pipedReader = new PipedReader();
PipedWriter pipedWriter = new PipedWriter(pipedReader);
- TODO Link?
PipedReaderEx1.java
package org.o7planning.pipedreader.ex;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.io.PipedReader;
import java.io.PipedWriter;
public class PipedReaderEx1 {
private PipedReader pipedReader;
private PipedWriter pipedWriter;
public static void main(String[] args) throws IOException, InterruptedException {
new PipedReaderEx1().test();
}
private void test() throws IOException, InterruptedException {
// Create a PipedReader
pipedReader = new PipedReader();
// Data written to 'pipedWriter'
// will appear automatically at 'pipedReader'.
pipedWriter = new PipedWriter(pipedReader);
new ThreadB().start();
new ThreadA().start();
}
//
class ThreadA extends Thread {
@Override
public void run() {
try {
char[] chs = new char[] { 'a', 'a', 'b', 'c', 'e' };
for (char ch : chs) {
pipedWriter.write(ch);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(pipedWriter);
}
}
}
//
class ThreadB extends Thread {
@Override
public void run() {
try {
int ch = 0;
while ((ch = pipedReader.read()) != -1) {
System.out.println((char) ch);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(pipedReader);
}
}
}
private void closeQuietly(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
private void closeQuietly(Writer writer) {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
}
}
Output:

Ví dụ: Sử dụng PipedReader, PipedWriter với BufferedReader và BufferedWriter để nâng cao hiệu xuất của chương trình.

PipedReaderEx2.java
package org.o7planning.pipedreader.ex;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.io.PipedReader;
import java.io.PipedWriter;
public class PipedReaderEx2 {
private BufferedReader bufferedReader;
private BufferedWriter bufferedWriter;
public static void main(String[] args) throws IOException, InterruptedException {
new PipedReaderEx2().test();
}
private void test() throws IOException, InterruptedException {
PipedReader pipedReader = new PipedReader();
PipedWriter pipedWriter = new PipedWriter();
pipedReader.connect(pipedWriter);
this.bufferedReader = new BufferedReader(pipedReader);
this.bufferedWriter = new BufferedWriter(pipedWriter);
new ThreadB().start();
new ThreadA().start();
}
//
class ThreadA extends Thread {
@Override
public void run() {
try {
String[] texts = new String[] { "One\nTwo\n", "Three\nFour\n", "Five" };
for (String text: texts) {
bufferedWriter.write(text);
bufferedWriter.flush();
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(bufferedWriter);
}
}
}
//
class ThreadB extends Thread {
@Override
public void run() {
try {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(bufferedReader);
}
}
}
private void closeQuietly(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
private void closeQuietly(Writer writer) {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
}
}
Output:
