Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- pointcut
- http
- kotlin
- Android
- 알고리즘
- JDBC
- transaction
- 스프링
- 스프링 핵심 기능
- jpa
- QueryDSL
- 자바
- Thymeleaf
- db
- 김영한
- Exception
- SpringBoot
- JPQL
- 스프링 핵심 원리
- java
- 인프런
- AOP
- 백준
- Proxy
- Greedy
- Servlet
- 그리디
- Spring Boot
- springdatajpa
- spring
Archives
- Today
- Total
개발자되기 프로젝트
보조 스트림 본문
1. 보조 스트림
- 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림
- FilterInputStream과 FilterOutputStream이 보조 스트림의 최상위 클래스
- 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 보조 스트림)을 가짐
- 즉 보조스트림 혼자만으로는 읽기/쓰기가 불가능하기 때문에 inputStream, outputStream을 주입받음.
- Decorator Pattern으로 구현됨
- 상위 클래스 생성자
생성자 | 설명 |
protected FilterInputStream과(InputStream in) | 생성자의 매개변수로 InputStream을 받습니다. |
public FilterOutputStream(OutputStream out) | 생성자의 매개변수로 OutputStream을 받습니다. |
2. InputStreamReader와 OutputStreamWriter
- 바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림
- FileInputStream으로 읽은 자료를 문자로 변환해주는 예
- FileInputStream은 바이트 단위로 읽는다. 문자를 읽을 경우(문자는 최대 4바이트 단위) 깨짐
- 이 때 FileInputStream을 InputStreamReader로 감싸서 사용이 가능하다.
- InputStreamReader은 FileINputStream이 읽은 자료를 문자로 변경해줌.
public class InputStreamReaderTest {
public static void main(String[] args) {
try(InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))){
int i;
while ((i=isr.read()) != -1){
System.out.print((char) i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. BufferedInputStream, BufferedOutputStream
- 약 8k의 배열이 제공되어 입출력을 빠르게 하는 기능을 제공하는 보조 스트림
- Bufferedreader와 BufferedWriter는 문자용 입출력 보조 스트림
- BufferedInputStrem과 BufferedOutputStream을 이용하여 파일 복사하는 예
- 먼저 Buffer기능이 없는 상태
public class FileCopyTest {
public static void main(String[] args) {
long millisecond = 0;
try(FileInputStream fis = new FileInputStream("a.zip");
FileOutputStream fos = new FileOutputStream("a_copy.zip")){
millisecond = System.currentTimeMillis();
int i;
while ((i=fis.read()) != -1){
fos.write(i);
}
millisecond = System.currentTimeMillis() - millisecond;
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(millisecond +"ms 소요됨");
}
}
- BufferedInputStrem과 BufferedOutputStream 사용
public class FileCopyTest {
public static void main(String[] args) {
long millisecond = 0;
try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.zip"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a_copy.zip"))){
millisecond = System.currentTimeMillis();
int i;
while ((i=bis.read()) != -1){
bos.write(i);
}
millisecond = System.currentTimeMillis() - millisecond;
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(millisecond +"ms 소요됨");
}
}
- 파일 크기가 너무 작아서 0ms 미만이 걸렸다.. ㅋㅋㅋㅋ
3-2. BufferedReader
- 사용예시 : 아래처럼 보조스트림이 부가 기능을 제공함
Socket socket = new Socket();
//바이트 단위로 읽음
InputStream inputStream = socket.getInputStream();
//문자 핸들링
InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
//버퍼 기능 추가
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- 한 줄 씩 읽는 메서드는 BuffuredReader에서만 제공함
//버퍼 기능 추가
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bufferedReader.readLine()
4. GitHub : 211031 Auxiliary Stream
'Java > 다양한 기능' 카테고리의 다른 글
여러가지 입출력 클래스 (0) | 2021.10.31 |
---|---|
DataInput(Output)Stream, Serialization(직렬화) (0) | 2021.10.31 |
문자단위 입출력 스트림 (0) | 2021.10.31 |
바이트 단위 출력 스트림 (0) | 2021.10.31 |
바이트 단위 입출력 스트림 (0) | 2021.10.31 |
Comments