Do It Java Day34
자바 입출력1
1. 스트림이란?
- 네트워크에서 자료의 흐름이 물과 같다는 의미에서 유래
- 다양한 입출력 장치에 독립적으로 일관성 있는 입출력을 제공하는 방식
- 입출력이 구현되는 곳: 파일 디스크, 키보드, 마우스, 메모리 네트워크 등
2. 스트림의 구분
대상 기준
- 입력 스트림: 대상으로부터 자료를 읽어 들이는 스트림
- 출력 스트림: 대상으로 자료를 출력하는 스트림
자료의 종류
- 바이트 스트림: 동영상, 음악 파일 등을 읽고 쓸 때 사용
- 문자 스트림: 2바이트 단위로 처리, 바이트 단위 처리 시 발생하는 문자 깨짐을 방지
기능
-
기반 스트림: 대상에 직접 자료를 읽고 쓰는 기능의 스트림
-
보조 스트림: 직접 읽고 쓰는 기능은 없이 추가적인 기능을 더해주는 스트림
- 보조 스트림은 직접 읽고 쓰는 기능이 없으므로 항상 기반 스트림이나 또 다른 보조 스트림을 생성자 매개변수로 포함한다
3. 표준 입출력
- System 클래스의 표준 입출력 멤버
public class System() {
public static PrintStream out;
public static PrintStream in;
public static PrintStream err;
}
System.out
- 표준 출력(모니터) 스트림
System.out.println("표준 출력");
System.in
- 표준 입력(키보드) 스트림
int d = System.in.read(); //한 바이트 읽어내기
System.err
- 표준 에러 출력(모니터) 스트림
System.err.println("데이터"); //빨갛게 출력
4. Scanner 클래스
- java.util 패키지에 있는 입력 클래스
- 문자뿐 아니라 정수, 실수 등 다른 자료형도 읽을 수 있음
- 콘솔, 파일 등 여러 대상에서 자료를 읽을 수 있음
5. 바이트 단위 스트림 - InputStream
- 바이트 단위 입력용 최상위 스트림
- 추상 메서드를 포함한 추상 클래스로 하위 클래스가 구현하여 사용
주요 하위 클래스
- FileInputStream - 파일에서 바이트 단위로 자료를 읽습니다
- ByteArrayInputStream - Byte배열 메모리에서 바이트 단위로 자료를 읽습니다
- FilterInputStream - 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림의 상위 클래스입니다
메서드
- int read() - 입력 스트림으로부터 한 바이트의 자료를 읽습니다. 읽은 자료의 바이트 수를 반환합니다.
- int read(byte b[ ]) - 입력 스트림으로부터 b[ ] 크기의 자료를 b[ ]에 읽습니다. 읽은 자료의 바이트 수를 반환합니다
- int read(byte b[ ], int off, int len) - 입력 스트림으로부터 b[ ] 크기의 자료를 b[ ]의 off변수 위치부터 저장하여 len만큼 읽습니다. 읽은 자료의 바이트 수를 반환합니다.
- void closer() - 입력 스트림과 연결된 대상 리소스를 닫습니다
5-2. 바이트 단위 스트림 - OutputStream
- 바이트 단위 출력용 최상위 스트림
- 추상 메서드를 포함한 추상 클래스로 하위 클래스가 구현하여 사용
주요 하위 클래스
- FileOutputStream - 바이트 단위로 파일에 자료를 씁니다
- ByteArrayOutputStream - Byte배열에 바이트 단위로 자료를 씁니다
- FilterOutputStream - 기반 스트림에서 자료를 쓸 때 추가 기능을 제공하는 보조 스트림의 상위 클래스입니다
메서드
- int wirte() - 한 바이트를 출력합니다
- int wirte(byte b[ ]) - b[ ] 배열에 있는 자료를 출력합니다
- int wirte(byte b[ ], int off, int len) - b[ ] 배열에 있는 자료의 off 위치부터 len 개수만큼 자료를 출력합니다
- void flush() - 출력을 위해 잠시 자료가 머무르는 출력 버퍼를 강제로 비워 자료를 출력합니다
- void closer() - 출력 스트림과 연결된 대상 리소스를 닫습니다. 출력 버퍼가 비워집니다
6. flush()와 close() 메서드
- 출력 버퍼를 비울 때 flush() 메서드 사용
- close() 메서드 내부에서 flush()가 호출되므로 close() 메서드가 호출되면 출력 버퍼가 비워짐
7. 문자 단위 스트림 - Reader
- 문자 단위로 읽는 최상위 스트림
주요 하위 클래스
- FileReader - 파일에서 문자 단위로 읽는 스트림 클래스
- InputStreamReader - 바이트 단위로 읽은 자료를 문자로 변환해 주는 보조 스트림 클래스
- BufferedReader - 문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공해 주는 보조 스트림
주요 메서드
- int read() - 파일로부터 한 문자를 읽습니다. 읽은 값을 반환합니다
- int read(char[ ] buf) - 파일로부터 buf 배열에 문자를 읽습니다
- int read(char[ ] buf, int off, int len) - 파일로부터 buf 배열의 off 위체에서부터 len 개수만큼 문자를 읽습니다
- void close() - 스트림과 연결된 파일 리소스를 닫습니다