반응형
InputStream
- stream이란?
일종의 데이터가 이동하는 통로. 점프투자바에서는 수도꼭지로 비유했다.
스트림을 가장 쉽게 이해하려면 수도꼭지를 생각하면 된다.
수도꼭지를 틀면 물이 나오고 수도꼭지를 잠그면 물이 나오지 않는다.
A라는 곳에서부터 B라는 곳까지 수도관이 연결되어 있고 A에서 계속 물을 보낸다면 B에서 수도꼭지를 틀때마다 물이 나오게 될 것이다.
여기서 스트림은 A수도관에서 B수도관으로 이동하는 물의 흐름이라고 할 수 있다.
- InputStream
가장 기본적인 입력 스트림. InputStream의 read메소드는 사용자 입력의 1byte만 받아들인다.
=> 1byte만 표현할 수 있다!
InputStream의 1byte만 읽을 수 있는 한계를 극복하기 위해 InputStreamReader가 존재한다
import java.io.InputStream;
public class StreamTest {
public static void main(String[] args) throws IOException {
InputStream in = System.in;
int a;
a = in.read();
System.out.println(a);
}
}
System.in은 InputStream의 객체임을 알 수는 있는데 System.in은 무엇일까?
단순하게 콘솔로부터 데이터를 입력받을 수 있게 해주는 것.
※throws IOException?
자바는 입력과 출력으로부터 일어날 수 있는 예외처리에 대해 까다로운 문법을 적용한다.
입출력을 할 때, 컴퓨터에 어떤 문제가 발생할 지 모르니 예외로 발생하는 것들을 미리 던져(?)버리는 것이다.
InputStreamReader
InputStream의 바이트 단위로 읽어 들이는 형식을 문자 단위 데이터로 변환시키는 중개자 역할을 하는 것.
즉, abc를 입력했을 때 InputStream은 'a'만 표현가능하지만 InputStreamReader를 이용하면 'abc'를 전부 읽을 수 있다.
근데 나는 문자열을 입력하고 싶은데?
여기서 bufferedReader가 등장한다
bufferedReader
bufferedReader와 .readLine() 사용하면 한줄씩 입력을 읽어올 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// import는 당연히 필수이다
public static void main(String[] args) throws IOException { // 예외처리 필수!
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
//정수형 입력이라면, 형변환 필수!
int i = Integer.parseInt(bf.readLine());
//Space를 경계로 끊어야 할 때
String arr[] = str.split(" ");
//또는 StringTokenizer 클래스 이용)
}
다만 bufferedReader는 문자열로만 읽을 수 있기 때문에 정수형을 입력하려면 integer.parseInt()로 형변환을 해서 사용해야한다!
- Stringtokenizer <<추가하기
Scanner
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println(scan.next());
scan.close();
}
}
BufferedReader vs Scanner
J2SE 5.0 부터 추가된 Scanner 클래스를 이용하면 콘솔입력을 보다 쉽게 처리 할 수 있다.
반면 BufferedReader는 Scanner보다 실행속도가 빠르다.
반응형
'Study > JAVA' 카테고리의 다른 글
[점프투자바] 05 객체지향 프로그래밍 05-6 인터페이스 (0) | 2021.11.03 |
---|---|
[JAVA] 전달인자(Argument)와 매개변수(Parameter) (0) | 2021.11.02 |
[JAVA] Call by value, Call by reference? (0) | 2021.11.01 |
[JAVA] 기본형(primitive)과 참조형(reference) 매개 변수 (0) | 2021.10.28 |
[JAVA] class, object, instance 차이 (0) | 2021.10.27 |