본문 바로가기
JAVA/기초

[JAVA 기초] 15 자바 입출력 (1)

by 푸_푸 2022. 8. 22.
728x90

*스트림
입출력 장치는 다양하기 때문에 장치에 따라 입출력을 다르게 구현하면 호환성이 떨어지는 문제가 생김
->이를 해결하기 위해 자바는 입출력 장치와 무관하고 일관성 있게 프로그램을 구현할 수 있도록 일종의 가상 통로인 스트림을 제공
네트워크에서 유래된 용어로 자료 흐름이 물이 흐름과 같다는 의미에서 사용함
자바의 모든 입출력은 스트림을 통해 이루어짐

 

*입력 스트림과 출력 스트림
- 입력 스트림 : 어떤 대상으로부터 자료를 읽어 들일 때 사용하는 스트림. 동영상 파일에서 자료를 읽을 때 사용
- 출력 스트림 : 편집 화면에 사용자가 쓴 글을 파일에 저장할 때 사용

입력 스트림과 출력 스트림

 

스트림은 단방향으로 자료가 이동하기 때문에 입력과 출력을 동시에 할 수 없음

 

- 입력 스트림 :  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

 

728x90

댓글