JAVA 입력 스트림 - InputStream / InputStreamReader / BefferedReader / Scanner

Lily·2023년 12월 20일
1
post-thumbnail
  1. InputStream:
    • 바이트(byte) 단위로 읽어들인다.
    • 주로 파일, 네트워크 연결, 시스템 입력 등과 같은 원시 바이트 데이터를 읽을 때 사용된다.
    • read() 메서드를 통해 한 바이트씩 데이터를 읽는다.
    • 이 클래스를 통해 문자나 숫자를 읽어들이면, 아스키코드 값이 출력된다.
      => 아스키 코드 값이 출력되므로 우리가 다시 문자로 해석해야하는 불편함이 있다.
InputStream is = new FileInputStream("example.txt");
int data = is.read();


우리가 입력한 문자를 그대로 출력하고 싶다면 - !

  1. InputStreamReader:
    • 바이트 스트림을 문자 스트림으로 변환하는 역할을 한다.
    • InputStream 을 통해 입력받은 뒤 문자로 변환시키는 중개자 역할을 한다.
      BUT ... 🫠 모든 유니코드 문자를 완전히 지원하진 못한다 ( ex. 한글을 제대로 인식하지 못한다)
    • 고정된 길이로만 데이터를 읽을 수 있다.
      InputStreamReader의 read() 메서드는 1 바이트 단위로 읽어 들인다.
    • InputStreamReader의 생성자는 IOException을 던질 수 있다.
InputStreamReader isr = new InputStreamReader(new FileInputStream("example.txt"), "UTF-8");
int data = isr.read();


이것도 불편하다.. 고정된 길이 말고 사용자가 입력한 입력을 전부 받고 싶다면 ?

  1. BefferedReader:
    • 문자 입력 스트림에 버퍼링 기능을 추가하는 클래스
    • BefferedReader 객체 생성 시 생성자의 입력값으로 InputStreamReader 의 객체가 필요하다.
    • readLine() 메서드를 사용하여 한 줄씩 문자열을 읽을 수 있다.
      => 한 줄씩 읽는 데 유용하다 !
    • BefferedReader 객체 생성 시 생성자의 입력값으로 InputStreamReader 의 객체가 필요하다.
BufferedReader br = new BufferedReader(new FileReader("example.txt"));
String line = br.readLine();

  1. Scanner:
    • 텍스트를 파싱하여 원하는 형식으로 읽을 수 있다.
    • 특정 데이터 유형에 대한 메서드 (nextInt(), nextDouble() 등)를 제공하여 간편하게 입력을 처리할 수 있다.
      => 다양한 타입의 데이터를 입력받을 수 있다
    • Scanner 클래스는 생성자의 입력값으로 System.in, 즉 InputStream 이 필요하다.
Scanner scanner = new Scanner(new File("example.txt"));
int value = scanner.nextInt();


BefferedReader 와 Scanner 의 차이점이 궁금하다 🧐

[ 주요한 차이점 ]

  1. 버퍼링:

    • BufferedReader: 데이터를 효율적으로 읽기 위해 내부에 버퍼를 사용한다. 따라서 입출력이 더 효율적이고 빠르다.
    • Scanner: 내부에 버퍼를 사용하지 않는다. 이로 인해 입출력이 덜 효율적일 수 있다.
  2. 파싱:

    • BufferedReader: 주로 문자열을 읽는 데 중점을 두고, 특별한 파싱 기능을 제공하지 않는다.
    • Scanner: 입력된 데이터를 간단하게 파싱하여 특정 데이터 타입으로 변환할 수 있는 메서드를 제공한다.
  3. 사용 편의성:

    • BufferedReader: 주로 문자열을 읽는 데 사용되며, 더 저수준의 입출력을 다루는 데 유용하다.
    • Scanner: 다양한 유형의 입력 데이터를 간편하게 처리할 수 있어서 사용자 입력이나 파일 입력을 다루는 데 편리하다.


사용 목적, 요구 사항, 편의성에 따라 BufferedReader 또는 Scanner 중 선택하여 사용하면 될 듯 하다 !

profile
내가 하고 싶은 거

0개의 댓글

관련 채용 정보