입출력 스트림이란?
네트워크에서 자료의 흐름이 물 같다라는 의미에서 유래 되었으며,
다양한 입출력 장치에 독립적으로 일관성 있는 입출력방식을 제공한다.
입출력이 구현되는 곳에서는 모두 I/O 스트림을 사용
예시) 키보드,파일 디스크, 메모리 등
입출력 스트림 구분은 어떻게 하는가?
I/O 대상기준 : 입력 스트림, 출력스트림
자료의 종류: 바이트 스트림, 문자 스트림
스트림의 기능 : 기반 스트림, 보조 스트림
입출력 스트림과 출력 스트림
입력 스트림: 대상으로부터 자료를 읽어 들이는 스트림
출력 스트림: 대상으로 자료를 출력하는 스트림
스트림의 예
종료 | 예시 |
입력 스트림 | FileInputStream,FileReader,BufferedInputStream,BufferedReader 등 |
출력 스트림 | FileOutputStream,FileWriter,BufferedOutputStream,BufferedWriter 등 |
Stream->바이트 단위
reader,writer->문자 단위
바이트 단위 스트림과 문자 단위 스트림
바이트 단위 스트림: 바이트 단위로 자료를 읽고 씀(동영상,음악파일 등)
문자 단위 스트림 : 문자는 2바이트씩 처리 해야 함
스트림의 예시
종류 | 예시 |
바이트 스트림 | FileInputStream, FileOutputStream,BufferedInputStream,BufferedOutputStream 등 |
문자 스트림 | FileReader,FileWriter,(기반)BufferedReader,BufferedWriter(보조) 등 |
기반 스트림과 보조 스트림
- 기반 스트림: 대상에 직접 자료를 읽고 쓰는 기능의 스트림
- 보조 스트림: 직접 읽고 쓰는 기능은 없고 추가적인 기능을 제공해주는 스트림
기반 스트림이나 또 다른 보조 스트림을 생성자의 매개변수로 포함함
스트림 예시
종류 | 예시 |
기반스트림 | FileReader,FileWriter,FileInputStream, FileOutputStream 등 |
보조스트림 | BufferedInputStream,BufferedOutputStream ,BufferedReader,BufferedWriter 등 |
System.in
- 한 바이트씩 읽어 들임
- 한글과 같은 여러 바이트로 된 문자를 읽기 위해서는 InputStreamReader와 같은 보조 스트림을 사용해야함
package stream.inputstream;
import java.io.IOException;
public class SystemInTest {
public static void main(String[] args) {
System.out.println("입력:");
try {
int i =System.in.read();
System.out.println(i);
System.out.println((char)i);
} catch (IOException e) {
e.printStackTrace();
}
}
}
한글을 읽기 위해서 보조스트림을 사용해서 아래와 같이 작성했다.
보조스트림은 말 단어 뜻 처럼 혼자 사용할 수 없고 System.in 등과 함께 사용한다.
package stream.inputstream;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemInTest2 {
public static void main(String[] args) {
System.out.println("입력 후 '끝'이라고 쓰세요:");
try {
int i;
InputStreamReader isr = new InputStreamReader(System.in);
while((i=isr.read())!='끝') {
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Scanner 클래스
- java.util 패키지에 있는 입력 클래스
- 문자뿐 아니라 정수, 실수등 다양한 자료형을 읽을 수 있음
- 생성자가 다양하여 여러 소스로 부터 자료를 읽을 수 있음
생성자 | 설명 |
Scanner(File source) | 파일을 매개변수로 받아 Scanner를 생성합니다. |
Scanner(InputStreamSource) | 바이트 스트림을 매개변수로 받아 Scanner를 생성합니다. |
Scanner(String source) | String을 매개변수로 받아 Scanner를 생성합니다. |
Console 클래스
- System.in을 사용하지 않고 콘솔에서 표준 입출력이 가능
- 이클립스와는 연동되지 않음
- Console 클래스의 메서드
메서드 | 설명 |
String readLine() | 문자열을 읽습니다. |
char[] readPassword() | 사용자에게 문자열을 보여 주지 않고 읽습니다. |
Reader reader() | Reader 클래스를 반환합니다. |
PrintWriter writer() | PrintWriter 클래스를 반환합니다. |
콘솔테스트 소스
package stream.inputstream;
import java.io.Console;
public class ConsoleTest {
public static void main(String[] args) {
Console console = System.console();
System.out.println("이름:");
String name= console.readLine();
System.out.println("비밀번호:");
char[] password=console.readPassword();
System.out.println(name);
System.out.println(password);
}
}
'JAVA' 카테고리의 다른 글
문자 단위 입출력 스트림 (0) | 2019.10.20 |
---|---|
바이트 단위 입출력 스트림 (0) | 2019.10.19 |
Multi-Thread 프로그래밍 (0) | 2019.10.17 |
예외처리 (0) | 2019.10.17 |
스트림관련 코딩 (0) | 2019.10.16 |