2013년 12월 6일 금요일

자바스트림,Java Stream (PipedInputStream, PipedOutputStream)이란? 파이프 입출력 스트림은 주로 멀티스레드 처리에 사용을 하는데,

자바스트림,Java Stream (PipedInputStream, PipedOutputStream)이란?

파이프 입출력 스트림은 주로 멀티스레드 처리에 사용을 하는데, 하나의 스레드가 읽어 들인 내용을 다른 스레드에게 전달하고자 할 때 파이프스트림의 기능을 이용하는 것이다.

1. PipedInputStream

PipedInputStream() : 아직 연결되지 않은 PipedInputStream을 생성.<?XML:NAMESPACE PREFIX = O />
PipedInputStream(PipedOutputStream src) : PipedOutputStream에 연결하는 PipedInputStream을 생성.

void connect(PipedOutputStream src) : PipedInputStream과 연결할 PipedOutputStream src를 지정

기본생성자를 이용해서 PipedInputStream을 생성한다면 반드시 이 함수를 사용해서 PipedOutputStream과 연결을 맺게 해야 한다.

2. PipedOutputStream

PipedOutputStream() : 아직 연결되지 않은 PipedOutputStream을 생성.
PipedOutputStream(PipedInputStream src) : PipedInputStream에 연결하는 PipedOutputStream을 생성합니다.

void connect(PipedInputStream snk) : PipedOutputStream과 연결할 PipedInputStream을 지정.

기본생성자를 이용해서 PipedOutputStream을 생성한다면 반드시 이 함수를 사용해서 PipedInputStream과 연결을 맺게 해야한다.

아래 예제는 키보드 입력을 pipe로 연결해서 콘솔화면에 출력하는 예제이다.
package onj;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class PipedInputOutputTest extends Thread {
      
       InputStream input;
       OutputStream output;
      
       PipedInputOutputTest(InputStream input,OutputStream output) {
             this.input = input;
             this.output = output;
       }
      
       public void run() {
             byte[] buf = new byte[1024];
             int i=0;
            
             try{
                    while(true) {
                           i = input.read(buf);
                          
                           if (i != -1) {
                                 output.write(buf, 0, i);
                           }
                           else {
                                 return;
                           }
                    }
             }
             catch(Exception e) {
                    e.printStackTrace();
             }           
       }
      
       public static void main(String[] args) throws IOException {
             //아래 처럼 기본생성자를 이용하여 pos 만들면 connect메소드로 연결해야 한다.
//           PipedInputStream pis = new PipedInputStream();
//           PipedOutputStream pos = new PipedOutputStream();
//          
//           pis.connect(pos);
            
             PipedInputStream pis = new PipedInputStream();
             PipedOutputStream pos = new PipedOutputStream(pis);
            
            
             PipedInputOutputTest p1 = new PipedInputOutputTest(System.in, pos);
             PipedInputOutputTest p2 = new PipedInputOutputTest(pis, System.out);
            
             p1.start();
             p2.start(); 
            
       }
      
}

댓글 없음:

댓글 쓰기