보조 스트림

2022. 5. 1. 21:19java/java

*보조 스트림

 1) 다른 스트림과 연결이 되어 여러가지 편리한 기능을 제공해주는 스트림

  - 문자 변환, 입출력 성능 향상, 기본데이터 타입 입출력, 객체 입출력 등의 기능을 제공

 

 2) 보조 스트림 생성

보조스트림 변수 = new 보조스트림(연결스트림)
InputStream is = System.in;
InputStreamReader reader = new InputStreamReader(is);

 3) 보조 스트림 체인

 

*문자 변환 보조 스트림

 1) 소스 트림이 바이트 기반 스트림이지만 데이터가 문자일 경우 사용할 수 있다.

  -Reader와 Writer는 문자 단위로 입출력하기 때문에 바이트 기반 스트림보다는 편리

  -문자셋의 종류를 지정할 수 있기 때문에 다양한 문자를 입출력

 

 2)InputStreamReader

InputStream is = System.in;
Reader reader = new InputStreamReader(is);

FileInputStream fis = FileInputStream("C:/Temp/file.tst");
Reader reader = new InputStreamReader(fis);

실습.

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public class InputStreamReaderExample {

	public static void main(String[] args) throws IOException {
		InputStream is = System.in;
		Reader reader = new InputStreamReader(is);
		
		int readCharNo;
		char[] cbuf = new char[100];	//과거와 달리 byte데이터 타입이 아닌 char형을 씀
		while((readCharNo = reader.read(cbuf)) != -1) {
			String data = new String(cbuf, 0, readCharNo);
			System.out.println(data);
		}
		
		reader.close();
		is.close();
	}
}

 3) OuterStreamWriter

 

FileOutputStream fos = new FileOutputStream("C:/Temp/file.txt");
Writer writer = new OutputStreamWriter(fos);

실습.

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class OutputStreamWriterExample {

	public static void main(String[] args) throws Exception {
		FileOutputStream fos = new FileOutputStream("C:/Temp/file.txt");
		Writer writer = new OutputStreamWriter(fos);
		
		String data = "바이트 출력 스트림을 문자 출력 스트림으로 변환";
		writer.write(data);
		
		writer.flush();
		writer.close();
		fos.close();
		System.out.println("파일 저장이 끝났습니다.");
	}
}

 

 

*성능 향상 보조 스트림

 1) 입출력 성능에 영향을 미치는 입출력 소스

  - 하드 디스크

  - 느린 네트워크

 2) 버퍼를 이용한 해결

  - 입출력 소스와 직접 작업하지 않고 버퍼와 작업하므로서 실행 성능을 향상

  - 프로그램은 쓰기 속도가 향상

  - 버퍼가 차게되면 데이터를 한꺼번에 하드 디스크로 보내므로서 출력 횟수를 줄여줌

 

 

 3) BufferedInputStream, BufferedReader

BufferedInputStream bis = new BufferedInputStream(바이트입력스트림);
BufferedReader br = new BufferedReader(문자입력스트림);

 

 4) BufferedOutputStream, BufferedWriter

 

BufferedOutputStream bos = new BufferedOutputStream(바이트출력스트림);
BufferedWriter bw = new BufferedWriter(문자출력스트림)

 

BufferedInputStream, BufferedReader

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamExample {

	public static void main(String[] args) throws IOException {
		long start = 0;
		long end   = 0;
		
		FileInputStream fis1 = new FileInputStream("C:/Users/새 폴더/interM/chap18/src/sec05/exam03_bufferedinputstream/스크린샷(27).png");
		
		start = System.currentTimeMillis();
		while(fis1.read() != -1) {}
		end = System.currentTimeMillis();
		System.out.println("사용하지 않았을 때 : " +(end - start) + "ms");
		fis1.close();
		
		FileInputStream fis2 = new FileInputStream("C:/Users/새 폴더/interM/chap18/src/sec05/exam03_bufferedinputstream/스크린샷(27).png");
		BufferedInputStream bis = new BufferedInputStream(fis2);
		start = System.currentTimeMillis();
		while(bis.read() != -1) {}
		end = System.currentTimeMillis();
		System.out.println("사용했을 때 : " +(end - start) + "ms");
		
		bis.close();
		fis1.close();
	}
}

 

                                                                 어마어마한 차이

 

BufferedOutputStream, BufferedWriter

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputStreamExample {

	public static void main(String[] args) throws IOException {
		FileInputStream  fis = null;
		FileOutputStream fos = null;
		
		BufferedInputStream  bis = null;
		BufferedOutputStream bos = null;
		
		int data = -1;
		long start = 0;
		long end   = 0;
		
		fis = new FileInputStream("C:/Users/gimseonwon/새 폴더/interM/chap18/src/sec05/exam05_bufferedoutputstream/스크린샷(27).png");
		bis = new BufferedInputStream(fis);
		fos = new FileOutputStream("C:/Temp/스크린샷(27).png");

		start = System.currentTimeMillis();
		
		while((data=bis.read()) != -1) {
			fos.write(data);
		}
		fos.flush();
		end = System.currentTimeMillis();
		fos.close(); bis.close(); fis.close();
		
		System.out.println("사용하지 않았을 때:" +(end-start) + "ms");
		
		fis = new FileInputStream("C:/Users/gimseonwon/새 폴더/interM/chap18/src/sec05/exam05_bufferedoutputstream/스크린샷(27).png");
		bis = new BufferedInputStream(fis);
		fos = new FileOutputStream("C:/Temp/스크린샷(27).png");
		bos = new BufferedOutputStream(fos);
		start = System.currentTimeMillis();
		
		while((data=bis.read()) != -1) {
			bos.write(data);
		}
		fos.flush();
		end = System.currentTimeMillis();
		bos.close(); fos.close(); bis.close(); fis.close();
		
		System.out.println("사용했을 때:" +(end-start) + "ms");
	}
}

 

 

'java > java' 카테고리의 다른 글

TCP 네트워킹  (0) 2022.05.07
보조 스트림(2)  (0) 2022.05.01
파일 입출력(2)  (0) 2022.05.01
스레드 그룹  (0) 2022.05.01
XML 정의와 사용법 (미완성)  (0) 2022.04.29