Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Development Log

[JAVA] 입력(Input) 본문

Question/JAVA

[JAVA] 입력(Input)

gu-su 2022. 2. 19. 15:57

 

자바에서 가장 기본이 되는 입력/출력 스트림은 InputStream/OutputStream 이다.

 

BufferedReader br = new Buffered(new InputStreamReader(System.in));

System.in

  • System.inInputStream 타입의 필드이다.
    System 클래스의 in이라는 필드는 InputStream의 정적 필드다.
  • System 클래스 in 변수는 표준 입력 스티림이다. 
  • 일반적으로 콘솔, 명령줄 인수 등을 통해 입력을 받을 수 있다.
  • 즉, 키보드나 터미널 등에서 입력을 넣어주는 것들은 System.in을 통해 연결된다는 의미이다.
  • 아래와 같이 사용할 수 있다. 
    public static void main(String[] args) throws IOException {
    		
    		InputStream inputstream = System.in;
    		int a = inputstream.read();
    		System.out.println(a);
    	
    }
     

InputStream.read() 특징

  1. 해당 문자의 시스템 또는 운영체제의 인코딩 형식의 10진수로 변수에 저장한다.
  2. 1byte만 읽는다.
컴퓨터의 모든 데이터는 바이트 단위 데이터로 구성되어있다. 
데이터 저장, 전달해도 컴퓨터에는 바이트 단위로 데이터가 저장된다.

 

문제 발생 => 1byte만 인식한글을 입력해도 읽지 못하고 엉뚱한 문자가 나온다. 

위와 같은 문제를 해결하고자 문자를 온전하게 읽기위해 확장시킨 것이 InputStreamReader이다.

 

InputStreamReader

  • InputStream의 바이트 단위로 읽어 들이는 형식을 문자단위(character)로 데이터 변환시키는 중개자 역을 한다고 볼 수 있다. 

특징

  1. 바이트 단위 데이터를 문자(character) 단위 데이터로 처리할 수 있도록 변환해준다.
  2. char 배열로 데이터를 받을 수 있다. 

 

문제 발생 => 문자열을 입력 받을 경우 매번 배열을 선언해야한다는 단점이 그대로 남아있다. 

 

BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

▽ 아래와 같이 풀어 쓸 수 있다.

InputStream inputstream = System.in;
InputStreamReader sr = new InputStreamReader(inputstream);
BufferedReader br = new BufferedReader(sr);
  • 기본적으로 바이트 스트림인 InputStream을 통해 바이트 단위로 데이터를 입력 받는다.
  • 입력 데이터를 char 형태로 처리하기 위해 중개자 역할인 문자 스트림 InputStreamReader로 감싸준다. 
  • Buffer(버퍼)를 통해 입력 받은 문자를 쌓아둔 뒤 한번에 문자열처럼 보낸다. 
  • 한번에 모아둔 다음 보내고 별다른 정규식을 검사하지 않아 속도가 빠르다.

 

특징 

  1. 버퍼가 있는 스트림이다.
  2. 별다른 정규식을 검사하지 않는다. 
    ※ Scanner의 경우 정규식 검사를 많이하기 때문에 타입 변환의 안전성에는 좋지만 속도가 느리다. 

 

버퍼를 따로 설정하지 않으면 기본으로 8192개의 문자를 저장할 수 있다.

기본적으로 개행이 입력되거나 버퍼가 꽉 차게 되면 버퍼를 비우면서 프로그램으로 데이터를 보낸다.

 

 

Byte Type InputStream
Char Type InputStreamReader
Char Type의 직렬화  BufferedReader

 

 

🙄

백준 문제를 풀며 사용하는 InputStreamReader.. System.in... 등

데이터를 보내는 통로라는 느낌만 기억하고 있어서 이론을 다시 짚어보기 위해 작성한다.

 

 

JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader]

이 글을 지금 이 시점에 써야 할까 고민을 많이 했다. 사실 자바를 그냥 다룰 줄만 아는 것에 목표를 둔다면 이 글이 무의미할 수도 있다. 그러나 자바에 대해 조금이라도 관심이 있고 더 배우고

st-lab.tistory.com