PipeReader와 PippedWriter
쓰레드간에 데이터를 주고받을때 사용된다.
한 스레드에서 생성한 데이터를 다른 스레드에서 읽을 수 있다.
입출력스트림을 하나의 스트림으로 연결해서 데이터를 주고받으며 입출력을 마친이후 한쪽스트림만 닫아도 나머지 스트림은 자동으로 닫힌다.
`PipedWriter`로 데이터를 쓰고, `PipedReader`로 데이터를 읽는 스레드 간 통신을 보여주는 예시이다.
`WriterTask` 클래스는 파이프에 데이터를 쓰고 `ReaderTask` 클래스는 파이프에서 데이터를 읽는다.
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
public class PipeExample {
public static void main(String[] args) {
try {
// PipedWriter와 PipedReader 인스턴스 생성
PipedWriter writer = new PipedWriter();
PipedReader reader = new PipedReader(writer);
// 쓰기 스레드 생성
Thread writerThread = new Thread(new WriterTask(writer));
// 읽기 스레드 생성
Thread readerThread = new Thread(new ReaderTask(reader));
// 스레드 시작
writerThread.start();
readerThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 데이터를 쓰는 스레드
class WriterTask implements Runnable {
private PipedWriter writer;
public WriterTask(PipedWriter writer) {
this.writer = writer;
}
@Override
public void run() {
try {
// 데이터 쓰기
for (int i = 0; i < 5; i++) {
writer.write("Message " + i + "\n");
Thread.sleep(1000); // 1초 대기
}
writer.close(); // 쓰기 완료 후 스트림 닫기
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
// 데이터를 읽는 스레드
class ReaderTask implements Runnable {
private PipedReader reader;
public ReaderTask(PipedReader reader) {
this.reader = reader;
}
@Override
public void run() {
try {
int data;
// 데이터 읽기
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
reader.close(); // 읽기 완료 후 스트림 닫기
} catch (IOException e) {
e.printStackTrace();
}
}
}
`PipedWriter`로 데이터를 쓰고, `PipedReader`로 데이터를 읽는 스레드 간 통신을 보여주는 예시이다.
`WriterTask` 클래스는 파이프에 데이터를 쓰고 `ReaderTask` 클래스는 파이프에서 데이터를 읽는다.
'JAVA' 카테고리의 다른 글
버퍼를 이용해서 입출력의 효율을 높이는 BufferedReader와 BufferedWriter (0) | 2024.04.11 |
---|---|
문자열 데이터를 읽고 쓰는 데 사용되는 클래스, StringReader와 StringWriter (0) | 2024.04.11 |
파일로부터 텍스트 데이터를 읽고, 파일에 쓰다 FileReader와 FileWriter (0) | 2024.04.11 |
문자기반스트림 Writer의 메서드 append() close() flush() write() (0) | 2024.03.21 |
문자기반스트림 Reader의 메서드 close() mark() markSupported() read() ready() skip() (0) | 2024.03.21 |