-
13주차 과제: I/O #13JAVA 기본 2021. 2. 28. 23:42728x90
목표
자바의 Input과 Ontput에 대해 학습하세요.
학습할 것 (필수)
- 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O
- InputStream과 OutputStream
- Byte와 Character 스트림
- 표준 스트림 (System.in, System.out, System.err)
- 파일 읽고 쓰기
입출력이란?
컴퓨터 내부 또는 외부 장치와 데이터를 주고 받는것을 말한다.
스트림(stream)
어느 한쪽에서 다른 쪽으로 데이터를 전달할때, 두 대상을 연결하고 데이터를 전송할 수 있는 것
데이터를 운방하는데 사용하는 연결 통로
+스트림은 연속적인 데이터의 흐름을 물에 비유해서 붙여짐
스트림은 단방향 통신만 가능
즉, 하나의 스트림으로 입력과 출력을 동시에 불가능
보조 스트림
스트림의 기능을 보완하기 위해 만들어진 것
실제 데이터를 주고 받는 스트림이 아니기에 데이터를 입출력할 수 있는 기능은 없다.
스트림의 기능향상과 새로운 기능 추가를 할 수 있다.
버퍼(buffer)
한 바이트씩 바로바로 보내는 것이 아니라 버퍼에 담았다가 한번에 모아서 보내는 방법
왜쓰는가?
속도가 향상된다.
왜 빨라지는가?
물을 한방울씩 마시는것보다 한잔을 마시는게 더 빠르다.
Channel
채널은 스트림과 달리 양방향으로 입출려깅 가능하다.
InputStream과 OutputStream
InputStream
바이트 기반 입력 스트림의 최상위 추상 클래스로 모든 바이트 기방 입력스트림은 이 클래스를 상속받아 만들어짐
데이터를 읽어오는 기능을 수행
메소드 == 함수 설명 read() 입력 스트림으로부터 1바이트를 읽어서 바이트를 리턴한다. read(byte[] b) 입력 스트림으로부터 읽은 바이트들을 매개값으로 주어진 바이트 배열 b 에 저장하고 실제로 읽은 바이트 수를 리턴 read(byte[] b, int off, int len) 입력 스트림으로부터 len 개의 바이트만큼 읽고 매개값으로 주어진 바이트 배열 b[off] 부터 len 개까지 저장. 그리고 실제로 읽은 바이트 수인 len 개를 리턴. 만약 len 개를 모두 읽지 못하면 실제로 읽은 바이트 수를 리턴 close() 사용한 시스템 자원을 반납하고 입력 스트림 닫기 OutputStream
데이터를 내보내는 기능을 수행
write(int b) 출력 스트림으로부터 1바이트를 보낸다.(b 의 끝 1바이트) write(byte[] b) 출력 스트림으로부터 주어진 바이트 배열 b의 모든 바이트를 보낸다. write(byte[ ] b, int off, int len) 출력 스트림으로 주어진 바이트 배열 b[off] 부터 len 개까지의 바이트를 보낸다. flush() 버퍼에 잔류하는 모든 바이트를 출력한다. close() 사용한 시스템 자원을 반납하고 입력 스트림 닫기 Byte와 Character 스트림
Byte
데이터를 1바이트 단위로 처리
이미지 동영상등을 송수신 할때 사용
Character
text 데이터를 입출력하는 스트림
2바이트 단위로 처리
html 등을 송수신 할때 사용
표준 스트림 (System.in, System.out, System.err)
표준입출력은 콘솔을 통한 데이터 입렬과 콘솔로의 데이터 출력을 의미한다.
자바에서는 표준 입출력을 위해 3가지 입출력스트림을 제공한다.
System.in 콘솔로부터 데이터를 입력받는데 사용
System.out 콘솔로 데이터를 출력하는데 사용
System.err 콘솔로 데이터를 출력하는데 사용
- err 은 버퍼링을 지원하지 않는다. 이것은 err 이 보다 정확하고 빠르게 출력되어야 하기 때문이라고 한다. 버퍼링을 하던 도중 프로그램이 멈추면 버퍼링된 내용은 출력되지 않기 때문이다.
파일 읽고 쓰기
텍스트 파일인 경우 문자 스트림 클래스를 사용
바이너리 파일인 경우 바이트 스트림을 사용
입출력 효율을 위해 Buffered 계열의 보조 스트림을 함께 사용하는 것이 좋다.
'JAVA 기본' 카테고리의 다른 글
15주차 과제: 람다식 #15 (0) 2021.03.05 14주차 과제: 제네릭 #14 (0) 2021.03.01 12주차 과제: 애노테이션 #12 (0) 2021.02.28 11주차 과제: Enum #11 (0) 2021.02.28 10주차 과제: 멀티쓰레드 프로그래밍 #10 (0) 2021.02.28