*스트림
입출력 장치는 다양하기 때문에 장치에 따라 입출력을 다르게 구현하면 호환성이 떨어지는 문제가 생김
->이를 해결하기 위해 자바는 입출력 장치와 무관하고 일관성 있게 프로그램을 구현할 수 있도록 일종의 가상 통로인 스트림을 제공
네트워크에서 유래된 용어로 자료 흐름이 물이 흐름과 같다는 의미에서 사용함
자바의 모든 입출력은 스트림을 통해 이루어짐
*입력 스트림과 출력 스트림
- 입력 스트림 : 어떤 대상으로부터 자료를 읽어 들일 때 사용하는 스트림. 동영상 파일에서 자료를 읽을 때 사용
- 출력 스트림 : 편집 화면에 사용자가 쓴 글을 파일에 저장할 때 사용
스트림은 단방향으로 자료가 이동하기 때문에 입력과 출력을 동시에 할 수 없음
- 입력 스트림 : ImputStream이나 Reader로 끝나는 이름의 클래스
- 출력 스트림 : OutpuyStream이나 Writer로 끝나는 이름의 클래스
종류 | 예시 |
입력 스트림 | FileInputStream, FileReader, BufferedInputStream, BufferedReader 등 |
출력 스트림 | FileOutputStream, FileWriter, BufferedOuetStream, BufferedWriter 등 |
*바이트 단위 스트림과 문자 단위 스트림
원래 자바의 스트림은 바이트(byte) 단위로 자료의 입출력이 이루어짐
그런데 문자를 나타내는 char형은 2바이트 이기 때문에 문자가 깨져 문자 스트림을 별도로 제공함
- 바이트 스트림 : 클래스의 이름이 Stream으로 끝나는 경우
- 문자 스트림 : 클래스의 이름이 Reader나 Writer로 끝나는 경우
종류 | 예시 |
바이트 스트림 | FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream 등 |
문자 스트림 | FileReader, FileWriter, BufferedReader, BufferdWriter 등 |
*기반 스트림과 보조 스트림
- 기반 스트림 : 자료를 직접 읽거나 쓰는 기능을 제공하는 스트림
읽어 들일 곳(소스)이나 써야 할 곳(대상)에서 직접 읽고 쓸 수 있으며 입출력 대상에 직접 연결되어 생성되는 스트림
- 보조 스트림 : 자료를 직접 읽거나 쓰는 기능은 없이 다른 스트림에 부가 기능을 제공하는 스트림
항상 다른 스트림을 포함하여 생성되는 스트림
종류 | 예시 |
기반 스트림 | FileInputStream, FileOutputStream, FileReader, FileWriter 등 |
보조 스트림 | InputStreamReader, OutputStreamWriter, BufferedInputStream, BufferedOutputStream 등 |
*표준 입출력
자바에서는 표준 입출력 클래스를 미리 정의해 둠
자료형 | 변수 이름 | 설명 |
static PrintStream | out | 표준 출력 스트림 |
static InputStream | in | 표준 입력 스트림 |
static OutputStream | err | 표준 오류 출력 스트림 |
out, in, err 모두 정적(static) 변수임
*Scanner 클래스
java.util 패키지에 있는 입력 클래스로, 문자뿐 아니라 정수, 실수 등 다른 자료형도 읽을 수 있음
콘솔 화면뿐 아니라 파일이나 문자열을 생성자의 매개변수로 받아 자료를 읽어올 수 있음
생성자 | 설명 |
Scanner(File source) | 파일을 매개변수로 받아 Scanner를 생성함 |
Scanner(InputStream source) | 바이트 스트림을 매개변수로 받아 Scanner를 생성함 |
Scanner(String source) | String을 매개 변수로 받아 Scanner를 생성함 |
Scanner scanner = new Scanner(System.in)
위처럼 사용하면 표준 입력으로 자료를 읽어 들이는 기능을 사용할 수 있음
Scanner 클래스는 System.in으로 입력받는 것보다 다양한 메서드를 활용할 수 있어 자주 사용함
메서드 | 설명 |
boolean nextBoolean() | boolean 자료를 읽음 |
byte nextByte() | 한 바이트 자료를 읽음 |
short nextShort() | short 자료형을 읽음 |
int nextInt() | int 자료형을 읽음 |
long nextLong() | long 자료형을 읽음 |
float nextFloat() | float 자료형을 읽음 |
double nextDouble() | double 자료형을 읽음 |
String nextLine() | 문자열 String을 읽음 |
*Console 클래스
System.in을 사용하지 않고 간단히 콘솔 내용을 읽을 수 있는 클래스
콘솔 창에서 자료를 입력 받을 때 사용, 이클립스에서는 연동되지 않음
메서드 | 설명 |
string readLine() | 문자열을 읽음 |
char[] readPassword() | 사용자에게 문자열을 보여주지 않고 읽음 |
Reader reader() | Reader 클래스를 반환 |
PrintWriter writer() | PrintWriter 클래스를 반환 |
*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 close() | 입력 스트림과 연결된 대상 리소스를 닫음 (FileInputStream인 경우 파일 닫음) |
read() 메서드의 반환형은 int (더 이상 읽어 들일 자료가 없는 경우 정수 -1이 반환되기 때문)
*FilleInputStream
바이트 단위로 자료를 읽어들일 때 사용하는 스트림 클래스
생성자 | 설명 |
FileInputStream(String name) | 파일 이름 name(경로 포함)을 매개변수로 받아 입력 스트림을 생성 |
FileInputStream(File f) | File 클래스 정보를 매개변수로 받아 입력 스트림을 생성 |
*OutputStream
바이트 단위로 쓰는 스트림 중 최상위 스트림
스트림 클래스 | 설명 |
FileOutputStream | 바이트 단위로 파일에 자료를 씀 |
ByteArrayOutputStream | Byte 배열에 바이트 단위로 자료를 씀 |
FilterOutputStream | 기반 스트림에서 자료를 쓸 때 추가 기능을 제공하는 보조 스트림의 상위클래스 |
메서드 | 설명 |
void write(int b) | 한 바이트를 출력함 |
void write(byte[] b) | b[] 배열에 있는 자료를 출력함 |
void write(byte b[], int off, int len) | b[] 배열에 있는 자료의 off 위치부터 len 개수만큼 자료를 출력함 |
void flush() | 출력을 위해 잠시 자료가 머무르는 출력 버퍼를 강제로 비워 자료를 출력함 |
void close() | 출력 스트림과 연결된 대상 리소스를 닫음. 출력 버퍼가 비워짐 (FileOutputStream인 경우 파일 닫음) |
*FileOutputStream
바이트 단위의 자료를 출력하기 위해 사용하는 스트림
생성자 | 설명 |
FileOutputStream(String name) | 파일 이름 name(경로 포함)을 매개변수로 받아 출력 스트림을 생성함 |
FileOutputStream(String name, boolean append) |
파일 이름 name(경로 포함)을 매개변수로 받아 출력 스트림을 생성함 append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 끝에 이어서 씀 디폴트 값 : false |
FileOutputStream(File, f) | File 클래스 정보를 매개변수로 받아 출력 스트림을 생성함 |
FileOutputStream(File f, boolean append) |
File 클래스 정보를 매개변수로 받아 출력 스트림을 생성함 append 값이 true이면 파일 스트림을 닫고 다시 생성할 때 끝에 이어서 씀 디폴트 값 : false |
'JAVA > 기초' 카테고리의 다른 글
[JAVA 기초] 15 자바 입출력 (2) [完] (0) | 2022.08.23 |
---|---|
[JAVA 기초] 14 예외 처리 (0) | 2022.08.21 |
[JAVA 기초] 13 내부 클래스, 람다식, 스트림 (0) | 2022.08.19 |
[JAVA 기초] 12 컬렉션 프레임워크 (2) (0) | 2022.08.19 |
[JAVA 기초] 12 컬렉션 프레임워크 (1) (0) | 2022.08.18 |
댓글