PipedWriter

PipedWriter is a character stream class in the java.io package used to write characters to a pipe. This pipe can be connected to a PipedReader which reads the characters written by PipedWriter. This mechanism facilitates inter-thread communication where one thread writes data, and another reads it.

Commonly Used Constructors and Methods

Simple Program Using PipedWriter

Mahesh and LotusJavaPrince want to simulate a simple chat system using threads. Mahesh acts as a sender writing messages to a PipedWriter. LotusJavaPrince acts as a receiver reading the messages via a connected PipedReader. The communication should be thread-safe and continuous until Mahesh sends a termination message "exit".

import java.io.*;

class ChatSender implements Runnable {
    private PipedWriter writer;

    public ChatSender(PipedWriter writer) {
        this.writer = writer;
    }

    @Override
    public void run() {
        String[] messages = {
            "Hello LotusJavaPrince!",
            "How are you today?",
            "Did you check the latest update?",
            "Let's meet tomorrow.",
            "exit"  // Signal to end chat
        };

        try (PrintWriter pw = new PrintWriter(writer)) {
            for (String msg : messages) {
                pw.println(msg);
                pw.flush();
                Thread.sleep(500);  // Simulate delay between messages
            }
        } catch (IOException | InterruptedException e) {
            System.out.println("Sender error: " + e.getMessage());
        }
    }
}

class ChatReceiver implements Runnable {
    private PipedReader reader;

    public ChatReceiver(PipedReader reader) {
        this.reader = reader;
    }

    @Override
    public void run() {
        try (BufferedReader br = new BufferedReader(reader)) {
            String msg;
            while ((msg = br.readLine()) != null) {
                if ("exit".equalsIgnoreCase(msg.trim())) {
                    System.out.println("Chat ended by sender.");
                    break;
                }
                System.out.println("LotusJavaPrince received: " + msg);
            }
        } catch (IOException e) {
            System.out.println("Receiver error: " + e.getMessage());
        }
    }
}

public class ChatApplicationCaseStudy {
    public static void main(String[] args) throws IOException {
        PipedWriter writer = new PipedWriter();
        PipedReader reader = new PipedReader(writer);

        Thread senderThread = new Thread(new ChatSender(writer));
        Thread receiverThread = new Thread(new ChatReceiver(reader));

        receiverThread.start();
        senderThread.start();
    }
}

Output

LotusJavaPrince received: Hello LotusJavaPrince!
LotusJavaPrince received: How are you today?
LotusJavaPrince received: Did you check the latest update?
LotusJavaPrince received: Let's meet tomorrow.
Chat ended by sender.

PipedWriter provides a way for one thread to send character data to another thread through a connected PipedReader.It supports thread communication via character streams and must be connected to a PipedReader.Always ensure proper closing of the streams to avoid resource leaks.

Scroll to Top