Java :: I/O :: 4.3 PipedReader 와 PipedWriter

김병철·2022년 9월 19일
0

Java

목록 보기
16/20

4.3 PipedReader와 PipedWriter

PipedReader와 PipedWriter는 쓰레드 간 데이터를 주고 받을 때 사용된다.
다른 스트림과는 달리 입력과 출력스트림을 하나의 스트림으로 연결(connect)해서 데이터를 주고 받는다.

스트림 생성 후 한 쪽 쓰레드에서 connec()를 호출하여 입력스트림과 출력스트림을 연결한다.
입출력을 마친 후에는 어느 한쪽 스트림만 닫아도 나머지 스트림은 자동으로 닫힌다.

# PipedReaderWriter 예제

PipedReader/PipedWriter를 이용해서 두 쓰레드가 서로 메세지를 주고 받는 예제이다.

import java.io.*;

public class Ex15_16 {

	public static void main(String[] args) {
		InputThread inThread = new InputThread("InputThread");
		OutputThread outThread = new OutputThread("OutputThread");
		
		// PipedReader 와 PipedWriter를 연결한다.
		inThread.connect (outThread.getOutput());
		
		inThread.start();
		outThread.start();
	}//main
}

class InputThread extends Thread {
	PipedReader input = new PipedReader();
	StringWriter sw = new StringWriter();
	
	InputThread(String name) {
		super(name);		// Thread(String name);
	}
	
	public void run() {
		try {
			int data = 0;
			
			while((data=input.read()) != -1) {
				sw.write(data);
			}
			System.out.println(getName() + " received : " + sw.toString());
		} catch(IOException e) {}
	}//run
	
	public PipedReader getInput() {
		return input;
	}
	
	public void connect (PipedWriter output) {
		try {
			input.connect(output);
		} catch(IOException e) {}
	}// connect
}

class OutputThread extends Thread {
	PipedWriter output = new PipedWriter();
	
	OutputThread(String name) {
		super(name);			// Thread(String name);
	}
	
	public void run() {
		try {
			String msg = "Hello";
			System.out.println(getName() + " sent : " + msg);
			output.write(msg);
			output.close();
		} catch(IOException e) {}
	} // run
	
	public PipedWriter getOutput() {
		return output;
	}
	
	public void connect (PipedReader input) {
		try {
			output.connect(input);
		} catch(IOException e) {}
	}//connect
			
}
  • 출력 결과 :
OutputThread sent : Hello
InputThread received : Hello

쓰레드 시작 전 PipedReader와 PipedWriter를 연결해야 한다.

profile
keep going on~

0개의 댓글