보조 스트림
- 기능을 더 해주는 스트림
실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림
FilterInputStream과 FilterOutputStream이 보조 스트림의 상위 클래스
생성자 | 설명 |
FilterInputStream | 생성자의 매개변수로 InputStream을 받는다. |
FilterOutputStream | 생성자의 매개변수로 OutputStream을 받는다. |
데코레이터 패턴(Decorator Pattern)
Buffered 스트림 : 내부에 8192 바이트의 배열을 가지고 있으며, 읽거나 쓸 때 속도가 빠르다.
DataInpuStream / DataOutputStream : 자료가 저장된 상태 그대로 자료형을 유지하며 읽거나 쓰는 기능을 제공하는 스트림
■ 파일 복사 시간비교
버퍼스트림을 사용해서 한 경우의 시간 비교 화면
★SourceCode
■보조스트림 여러개 사용
package decorator;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class FileCopy {
public static void main(String[] args) throws IOException {
long milliseconds = 0;
try ( FileInputStream fis = new FileInputStream("a.zip");
FileOutputStream fos = new FileOutputStream("copy.zip");
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos)){
milliseconds = System.currentTimeMillis();
int i ;
while((i = bis.read())!=-1) {
bos.write(i);
}
milliseconds = System.currentTimeMillis() - milliseconds;
}catch(IOException e) {
System.out.println(e);
}
Socket socket = new Socket();
//보조스트림의 여러개가 계속 감싸면서 기능이 계속적으로 추가되는 형태 데코레이터 패턴
//소켓에서 바이트 단위로 읽고
//socket.getInputStream()
//InputStreamReader으로 감싸줘서 문자 단위로 읽을 수 있게 된다.
// 다시 위의 것을 BufferedReader 감싸면 읽을때 버퍼링 기능까지 사용 할 수 있다.
BufferedReader isr =new BufferedReader( new InputStreamReader(socket.getInputStream()));
isr.readLine();
System.out.println("시간:"+milliseconds);
}
}
■보조스트림
package decorator;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataStreamTest {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("data.txt");
DataOutputStream dos = new DataOutputStream(fos);
FileInputStream fis = new FileInputStream("data.txt");
DataInputStream dis =new DataInputStream(fis)){
dos.writeByte(100);
dos.write(100);
dos.writeChar('A');
dos.writeUTF("안녕하세요.");
System.out.println(dis.readByte());
System.out.println(dis.read());
System.out.println(dis.readChar());
System.out.println(dis.readUTF());
}catch(IOException e) {
}
}
}
반응형
'JAVA' 카테고리의 다른 글
입출력 클래스 및 데코레이터패턴 (0) | 2019.10.25 |
---|---|
직렬화(Serialization) (0) | 2019.10.24 |
Socket통신 HTTP 통신 (0) | 2019.10.22 |
문자 단위 입출력 스트림 (0) | 2019.10.20 |
바이트 단위 입출력 스트림 (0) | 2019.10.19 |