보조 스트림
2022. 5. 1. 21:19ㆍjava/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");
}
}