달력

7

« 2025/7 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2011. 7. 29. 13:01

Piped Stream JAVA이야기2011. 7. 29. 13:01

이 스트림은 입출력 한 쌍으로 되어있다.
파이프는 서로 다른 스레드사이의 데이터 통신을 위한 IO 기반의 메커니즘을 제공한다.
Piped Stream을 사용하는 유일하게 안전한 방법은 두 개의 스레드로 구성하여 한 개의 스레드는 읽고 다른 스레드는 쓰게 만드는 것이다.
파이프의 끝에 쓴느 작업은 파이프가 가득 찼을때 블록된다. 

public class TextGenerator extends Thread{

private Writer out;
public TextGenerator(Writer out) {
// TODO Auto-generated constructor stub
this.out =out;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(char c = 'a'; c <='z'; c++){
try {
out.write(c);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

/**
* 파이프는 한쌍이어야 함
* reader생성자에서 writer객체를 넘겨주던가
* writer생성자에서 reader객체를 넘겨줘서
* 연결해줘야 한다.
*/
PipedWriter out = new PipedWriter();
PipedReader in = new PipedReader(out);
TextGenerator data = new TextGenerator(out);
data.start();
int ch;
while((ch = in.read()) != -1){
System.out.print((char) ch);



//다음과 같은 에러 발생
abcdefghException in thread "main" java.io.IOException: Write end dead
at java.io.PipedReader.read(Unknown Source)
at com.hooney.stream.Pipe.main(Pipe.java:18)
ijklmnopqrstuvwxyz

Writer의 스레드가 종료되어서 IOException이 발생했따.
Reader도 마찬가지, 둘 중에 하나의 스레드가 종료되었다면 현재 스레드는 IOException을 발생시킨다.
 
나중에 연결하고 싶을 때 connect 함수를 사용하면 된다.
다시 연결하려고 하면 IOException 발생 

'JAVA이야기' 카테고리의 다른 글

StreamTokenizer  (0) 2011.07.30
PushBackStream  (0) 2011.07.30
동기화와 동시성, Filter Stream, Buffered Stream  (0) 2011.07.29
스트림 클래스  (0) 2011.07.29
스트림개요  (0) 2011.07.29
:
Posted by НooпeУ


Code Start Code End