2013년 12월 5일 목요일

자바스트림,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(); 
            
       }
      
}

댓글 없음:

댓글 쓰기