본문 바로가기

CS/Java

InputStreamReader

 

 

 

이번 포스팅에서는 Java에서의 입력방법 중 하나인 InputStreamReader에 대해 얘기해볼 것이다.

 

 

 

2) InputStreamReader : 문자 단위로 읽어 들인다.

 

저번 포스팅에서 InputStream 클래스는 출력되는 값이 아스키코드 값이므로

다시 문자로 해석해야 하는 방식 때문에 불편하다고 하였다.

 

InputStreamReader는 바이트 단위로 읽어 들이는 InputStream을 통해 입력을 받은 뒤,

문자 단위로 데이터를 변환시키는 중개자 역할을 하는 클래스로,

InputStream의 단점을 보완해 우리가 입력한 문자 값을 그대로 출력해주는 역할을 한다.

 

예) 입력 : abc, 출력 : abc

 

그렇다면, 이제 InputStreamReader을 이용해 입력을 받는 코드를 짜 보자.

 

import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamTest {
    public static void main(String[] args) throws Exception {
        InputStream in = System.in;
        InputStreamReader reader = new InputStreamReader(in); // ①
        char[] a = new char[3]; // 배열의 크기가 3인 배열 a 선언
        reader.read(a); // ②

        System.out.println(a);
    }
}

 

① : 주어진 입력 바이트 스트림 in에 대해 기본 인코딩을 사용하는 객체를 생성한다.

- InputStreamReader reader = new InputStreamReader(in); -

 

InputStreamReader은 위에서 말했듯이,

InputStream을 통해 바이트 단위로 입력받은 값을 지정된 문자 인코딩에 따라 문자로 변환하는 클래스로,

Charset이라는 클래스에서 기본 인코딩인 UTF-16 방식으로 문자를 변환해준다.

 

 

② : byte 배열대신에 char 배열로 데이터를 받을 수 있다.

-

Char[] a = new char[3];

reader.read(a);

-

 

 

여기까지가 InputStreamReader를 이용하여 입력받는 방법이었다.

 

이 방법은 InputStream에서 많이 개선되었지만,

고정된 길이로만 읽어야 한다는 불편한 점이 있다.

(위 예제에서는 항상 3 byte만 읽도록 고정)

사용자가 엔터키를 입력할 때까지 사용자의 입력을 전부 받아들일 수는 없을까 ??

 

이 방법은  BufferReader라는 클래스를 이용하는 것으로, 다음 포스팅에서 알아보자!

 

 

 

 

'CS > Java' 카테고리의 다른 글

Scanner  (0) 2020.05.07
BufferedReader  (0) 2020.05.07
InputStream  (0) 2020.05.07
변수  (0) 2020.05.07
main 메소드  (0) 2020.05.07