티스토리 뷰
Goal
- 입출력 스트림에 대해 알아본다
- 표준 입출력 스트림에 대해 알아본다
1. 입출력 스트림이란?
- 네트워크에서 자료의 흐름이 물과 같다는 의미에서 유래
- 다양한 입출력 장치에 독립적으로 일관성 있는 입출력 방식 제공
- 입출력이 구현 되는 곳에서는 모두 I/O 스트림을 사용 : 키보드, 파일 디스크, 메모리 등
2. 입출력 스트림 구분
- I/O 대상 기준 : 입력 스트림, 출력 스트림
- 자료의 종류 : 바이트 스트림, 문자 스트림
- 스트림의 기능 : 기반 스트림, 보조 스트림
2-1. 입력 스트림과 출력 스트림.
- 입력 스트림 : 대상으로 부터 자료를 읽어 들이는 스트림
- 출력 스트림 : 대상으로 자료를 출력하는 스트림
2-2. 바이트 단위 스트림과 문자 단위 스트림
- 바이트 단위 스트림 : 바이트 단위로 자료를 읽고 씀 (동영상, 음악파일 등)
- 문자 단위 스트림 : 문자는 2바이트씩 처리 해야 함
2-3. 기반스트림 보조스트림
- 기반 스트림 : 대상에 직접 자료를 읽고 쓰는 기능의 스트림(ex Read, Write)
- 보조 스트림 : 직접 읽고 쓰는 기능은 없고 추가적인 기능을 제공해 주는 스트림, 기반 스트림이나 또 다른 보조 스트림을 생성자의 매개변수로 포함함.
3. 표준 입출력
- System 클래스의 표준 입출력 멤버
public class System {
public static PrintStream out; // 표준 출력 스트림
public static InputStream in; // 표준 입력 스트림
public static PrintStream err; // 표준 에러 스트림
}
3-1. System.in
- 한 바이트씩 읽어 들임 (InputStream의, System.in.read()를 통해 읽어들인다.)
- 표준 IO는 계속 열려있기 때문에 close를 하지 않는다.
- 한글과 같은 여러 바이트로 된 문자를 읽기 위해서는 InputStreamReader와 같은 보조 스트림을 사용해야 함.
1) System.in 사용
package stream.inputstream;
import java.io.IOException;
public class SystemInTest2 {
public static void main(String[] args) {
System.out.println("입력:");
//enter를 입력하기 전까지 1바이트의 문자 출력
try {
int i;
while((i = System.in.read()) != '\n') {
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3-2 보조스트림을 사용하여 한글 입력.
1) 한글을 읽어 들일 수 없는 System.in
- 1바이트씩 읽어들일 수 있는 inputStream의 특성으로 '끝'이라는 2바이트 문자를 읽어들이지 못해 while문이 계속 실행됨.
package stream.inputstream;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemInTest3 {
public static void main(String[] args) {
System.out.println("입력 후 '끝' 이라고 쓰세요:");
//System.in은 inpurStream이기 때문에 1바이트씩 읽어들여
//2바이트인 한글은 인식할 수 없음. 따라서 while문이 끝나지 않음.
try {
int i;
while((i = System.in.read()) != '끝') {
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2) 출력결과
- '끝'을 읽어들이지 못해 입력을 계속 받게 됨.
- 네모창이 빨간색인것으로 프로그램이 계속 실행중인것을 확인할 수 있음.
3) 보조스트림을 이용하여 한글 입력
- InputStreamReader를 이용하여 2바이트의 한글을 읽음.
package stream.inputstream;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemInTest3 {
public static void main(String[] args) {
System.out.println("입력 후 '끝' 이라고 쓰세요:");
//보조 스트림을 사용하여 한글을 읽어들임.
try {
int i;
//InputStreamReader는 다른 Stream을 생성자의 매개변수로 받는다.
InputStreamReader isr = new InputStreamReader(System.in);
while((i = isr.read()) != '끝') {
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
//바이트단위로 자료를 읽을때, 그것을 다시 문자로 변환해줌 (InputStreamReader)
}
}
4) 출력 결과
- 보조스트림을 통해 '끝'을 인식하여, '끝'이전까지 입력받은 내용을 출력함.
4. Scanner 클래스
- java.util 패키지에 있는 입력 클래스
- 문자뿐 아니라 정수, 실수 등 다양한 자료형을 읽을 수 있음
- 생성자가 다양하여 여러 소스로 부터 자료를 읽을 수 있음
5. Console 클래스
- System.in 을 사용하지 않고 콘솔에서 표준 입출력이 가능
- 이클립스와는 연동되지 않음
- Console 클래스의 메서드
1) Console 클래스 작성
- 작성은 이클립스에서 가능하지만 출력은 콘솔에서가능
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);
}
}
2) cmd에서 실행결과
'Java > Java 올인원 패키지' 카테고리의 다른 글
35. 쓰레드 Thread (Java) (0) | 2020.04.06 |
---|---|
34. 직렬화 (Java) (0) | 2020.04.06 |
30. 예외 처리 (Java) (0) | 2020.03.24 |
29. 스트림 (Java) (0) | 2020.03.23 |
28. 람다식 (Java) (0) | 2020.03.23 |
- 20200502
- 20200330
- 20200319
- chapter7
- 20200512
- 20200415
- 20200503
- 20200428
- 20200417
- 20200413
- 20200403
- 20200406
- 20200427
- 20200317
- 20200504
- 20201204
- 20200624
- 생활코딩리눅스
- 20200510
- 20200429
- 백준
- 20200425
- chapter8
- 20200804
- 20200424
- 20200420
- 20200421
- likelion
- 20200423
- 20200622
- Total
- Today
- Yesterday