PipedInputStream과 PipedOutputStream을 이용한 데이타 전달
ReadThread는 Thread 객체며, 생성자는 외부로부터 InputStream과 OutputStream을 받아들인다.
run() 메소드에서 생성자에서 받아들인 InputStream으로부터 읽어 들여 생성자에서 받아들인 OutputStream에게 출력하게 된다.
PipedInputStream을 생성한 후, 생성한 객체를 PipedOuutputStream의 생성자에 지정했다.
이 경우, readOut에 있는 출력 메소드를 사용하게 되면, writeIn에서 읽어들일 수 있게 된다.
스레드 두 개를 생성한다.
첫번째 스레드는 표준 입력 장치로 부터 입력을 받아 PipedOutputStream readOut을 통해서 출력하는 스레드다.
두번째 스레드는 PipedInputStream 인 writeIn으로부터 읽어 들여 표준 출력 장치에 출력하는 스레드다.
스레드 두 개는 start() 메소드에 의해서 실행되고 키보드로부터 입력 받은 글자는 PipedOutputStream에서 출력하게 된다. 그리고 PipedOutputStream에서 출력한 내용은 PipedInputStream에 의해서 읽혀지게 되어 표준 출력 장치로 출력하게 된다.
import java.io.*;
class ReadThread extends Thread{
InputStream pi = null;
OutputStream po = null;
ReadThread( InputStream pi, OutputStream po) {
this.pi = pi;
this.po = po;
}
public void run() {
int ch;
int i;
try {
for(;;) {
i = pi.read();
if (i == -1) { return; }
po.write(i);
}
} catch (Exception e) { }
}
}
class SystemStream {
public static void main( String [] args) {
try {
int ch;
while (true) {
PipedInputStream writeIn = new PipedInputStream();
PipedOutputStream readOut = new PipedOutputStream( writeIn );
ReadThread rt = new ReadThread( System.in, readOut );
ReadThread wt = new ReadThread( writeIn, System.out );
rt.start();
wt.start();
}
} catch (Exception e) {
System.out.println(e);
}
}
}
class ReadThread extends Thread{
InputStream pi = null;
OutputStream po = null;
ReadThread( InputStream pi, OutputStream po) {
this.pi = pi;
this.po = po;
}
public void run() {
int ch;
int i;
try {
for(;;) {
i = pi.read();
if (i == -1) { return; }
po.write(i);
}
} catch (Exception e) { }
}
}
class SystemStream {
public static void main( String [] args) {
try {
int ch;
while (true) {
PipedInputStream writeIn = new PipedInputStream();
PipedOutputStream readOut = new PipedOutputStream( writeIn );
ReadThread rt = new ReadThread( System.in, readOut );
ReadThread wt = new ReadThread( writeIn, System.out );
rt.start();
wt.start();
}
} catch (Exception e) {
System.out.println(e);
}
}
}
class ReadThread extends Thread{
……
ReadThread( InputStream pi, OutputStream po) {
……
}
public void run() {
……
}
}
……
ReadThread( InputStream pi, OutputStream po) {
……
}
public void run() {
……
}
}
ReadThread는 Thread 객체며, 생성자는 외부로부터 InputStream과 OutputStream을 받아들인다.
run() 메소드에서 생성자에서 받아들인 InputStream으로부터 읽어 들여 생성자에서 받아들인 OutputStream에게 출력하게 된다.
while (true) {
PipedInputStream writeIn = new PipedInputStream();
PipedOutputStream readOut = new PipedOutputStream( writeIn );
……
PipedInputStream writeIn = new PipedInputStream();
PipedOutputStream readOut = new PipedOutputStream( writeIn );
……
PipedInputStream을 생성한 후, 생성한 객체를 PipedOuutputStream의 생성자에 지정했다.
이 경우, readOut에 있는 출력 메소드를 사용하게 되면, writeIn에서 읽어들일 수 있게 된다.
ReadThread rt = new ReadThread( System.in, readOut );
ReadThread wt = new ReadThread( writeIn, System.out );
rt.start();
wt.start();
ReadThread wt = new ReadThread( writeIn, System.out );
rt.start();
wt.start();
스레드 두 개를 생성한다.
첫번째 스레드는 표준 입력 장치로 부터 입력을 받아 PipedOutputStream readOut을 통해서 출력하는 스레드다.
두번째 스레드는 PipedInputStream 인 writeIn으로부터 읽어 들여 표준 출력 장치에 출력하는 스레드다.
스레드 두 개는 start() 메소드에 의해서 실행되고 키보드로부터 입력 받은 글자는 PipedOutputStream에서 출력하게 된다. 그리고 PipedOutputStream에서 출력한 내용은 PipedInputStream에 의해서 읽혀지게 되어 표준 출력 장치로 출력하게 된다.
실행하면 메모리 부족 오류가 발생한다 나만 그런가?
catch 구문에 OutOfMemoryError 처리를 하면된다. 실행은 정상적으로 되는건지 모르겠다.
COMMAND창에서 실행했다면 종료는 Ctrl + C로하면된다
catch 구문에 OutOfMemoryError 처리를 하면된다. 실행은 정상적으로 되는건지 모르겠다.
COMMAND창에서 실행했다면 종료는 Ctrl + C로하면된다
'개인참고자료 > 자바(네트워크)' 카테고리의 다른 글
문자 스트림 - InputStreamReader과 OutputStreamWriter (0) | 2008.07.13 |
---|---|
문자 스트림 - Reader와 Writer (0) | 2008.07.13 |
바이트 기반 스트림 - PipedInputStream과 PipedOutputStream (0) | 2008.07.13 |
바이트 기반 스트림 - 파일이나 배열의 내용을 읽어 들여 출력 (0) | 2008.07.13 |
바이트 기반 스트림 - 파일 내용을 바이트 배열에 저장한 후 화면에 출력 (0) | 2008.07.13 |